VB 
.NET - Arrastando e soltando imagens em 
um formulário com Drag and Drop
    
    
    ![]()  | 
    
     Neste artigo eu vou mostrar como podemos arrastar e soltar imagens em um formulário de uma aplicação Windows Forms usando a linguagem VB .NET e os recursos drag and drop da plataforma .NET.  | 
  
Para começar uma operação de arrastar-e-soltar, você chama o método DoDragDrop de um controle Windows Forms. O método DoDragDrop é implementado na classe System.Windows.Forms.Control, o que significa que ela está disponível em todos os controles dentro de namespace do Windows Forms.
Além disso dois eventos importantes devem ser tratados durante a operação de arrastar e soltar:
O método DoDragDrop leva dois argumentos: os dados a serem arrastados, e as operações de arrasto que esse controle permite. Você pode chamar o método DoDragDrop a qualquer momento, embora com mais frequência que você vai querer usar o evento MouseDown como uma maneira de provocar arrastando quando o usuário espera.
Ao arrastar (drag) um arquivo para o formulário temos que tratar quando o arquivo é solto (drop) no formulário pois o Windows Explorer já trata a operação de arrastar. Para arrastar um arquivo para o formulário primeiro configuramos a propriedade AllowDrop do formulário para true de forma que o formulário possa aceitar objetos que sejam arrastados.
O manipulador de eventos verifica se ao soltar o objeto (drop) temos um item do tipo DataFormat.FileDrop, ou seja, permitimos que somente arquivos sejam arrastados, em seguida ele extrai o nome do DataObject no argumento DragEvent e usa o nome do arquivo para carregar a imagem e colocá-la no controle correspondente onde o arquivo esta sendo descarregado.
O campo DataFormat.FileDrop define o formato de arquivos do sistema de arquivos do Windows para a operação drop.(soltar)
Neste processo a enumeração DragDropEffects descreve o efeito do cursor que pode ser representado durante a operação e não irá garantir que o objeto será movido. Abaixo vemos os seus valores:
| Membro | Descrição | 
|---|---|
| All | Os dados são copiados , removido da fonte arrastar , e rolado no destino. | 
| Copy | Os dados são copiados para o destino | 
| Link | Os dados são vinculados ao destino | 
| Move | Os dados são movidos para o destino | 
| None | O destino não aceita os dados | 
| Scroll | A Rolagem está prestes a começar ou ocorrendo atualmente no alvo. | 
Qualquer controle pode aceitar dados de uma operação de arrastar-e-soltar em andamento. Para designar um controle como uma zona para soltar, você deve fazer três coisas:
O evento DragEnter ocorre quando uma operação de arrastar-e-soltar está em andamento (ou seja, algum controle chamou o método DoDragDrop) e o cursor entra o controle. Este evento passa um argumento da classe System.Windows.Forms.DragEventArgs. Você deve definir a propriedade Effects argumento para um valor a partir da Tabela acima para indicar a ação que será tomada caso a operação seja concluída neste controle. O sistema usará este valor para pegar o cursor de soltar indicado para exibir.
È isso que vamos fazer.
Recursos Usados :
Criando o projeto no Visual Studio 2013 Express for Windows Desktop
Abra o VS Express 2013 for Windows Desktop e clique em New Project;
A seguir selecione a linguagem Visual C# e o template Windows Forms Application;
Informe o nome Drag_Drop_Imagens e clique no botão OK;
    ![]()  | 
  
Agora vamos definir o código para habilitar a operação de arrastar e soltar no formulário form1.vb do projeto.
1 - No evento Load temos o código que define AllowDrop igual a True permitindo o controle receber dados; a seguir define a propriedade BackgroundImageLayout como Stretch de forma a ajustar a imagem no formulário e trata os eventos DragDrop e DragEnter usando o operador AddressOf que cria um delegado de função que aponta para a função especificada, no caso, os eventos Form_DragDrop e FormDragEnter:
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.AllowDrop = True
        Me.BackgroundImageLayout = ImageLayout.Stretch
        AddHandler Me.DragDrop, AddressOf Form_DragDrop
        AddHandler Me.DragEnter, AddressOf Form_DragEnter
    End Sub
    
  | 
  
2- No evento DragDrop criamos um array de strings (Arquivos()) onde os arquivos serão armazenados e exibimos o arquivo imagem em um controle Image via propriedade BackGroundImage do formulário:
       Private Sub Form_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs)
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            Dim Arquivos() As String
            Arquivos = e.Data.GetData(DataFormats.FileDrop)
            Dim img As Image
            img = Image.FromFile(Arquivos(0))
            Me.Width = img.Width
            Me.Height = img.Height
            Me.BackgroundImage = img
        End If
    End Sub
     | 
  
3- No evento DragEnter permitimos que apenas arquivos sejam arrastados usando DataFormatas.FileDrop, e definimos a enumeração DragDropEffects como All:
Nota: DragDropEffects especifica os possíveis efeitos de uma operação de arrastar-e-soltar. All indica uma combinação dos efeitos Copy, Move e Scrool.
     Private Sub Form_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs)
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effect = DragDropEffects.All
        End If
    End Sub | 
  
Executando o projeto e abrindo uma pasta com imagem ao lado do formulário podemos selecionar uma imagem e arrastar a imagem para o formulário:
    ![]()  | 
  
Ao soltar a imagem no formulário iremos obter a visualização da imagem conforme abaixo:
    ![]()  | 
  
Pegue o projeto 
completo aqui : 
Drag_Drop_Imagens.zip
    
Porque nem mesmo seus irmãos criam nele.
    Disse-lhes, pois, Jesus: Ainda não é chegado o meu tempo, mas 
o vosso tempo sempre está pronto.
    O mundo não vos pode odiar, mas ele me odeia a mim, porquanto 
dele testifico que as suas obras são más.
    João 7:5-7
| 
    
    Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! 
 Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?  | 
  
  Gostou ?  
Compartilhe no Facebook
  
 
Compartilhe no Twitter 
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
TreeView - Arrastar e Soltar (Drag and Drop) - Macoratti.net