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