Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para executar operações de arrastar e soltar em aplicativos baseados no Windows, você deve lidar com uma série de eventos, principalmente os eventos DragEnter, DragLeavee DragDrop. Trabalhando com as informações disponíveis no evento argumentos desses eventos, você pode facilmente orientar as operações do tipo "arrastar e soltar".
Arrastando dados
Todas as operações do tipo "arrastar e soltar" começam com arrastar. A funcionalidade para a coleta de dados ser iniciada quando o arraste começa é implementada no método DoDragDrop.
No exemplo a seguir, o evento MouseDown é usado para iniciar a operação de arrastar porque é a mais intuitiva (a maioria das ações de arrastar e soltar começa com o botão do mouse sendo pressionado). No entanto, lembre-se de que qualquer evento pode ser usado para iniciar um procedimento do tipo "arrastar e soltar".
Observação
Determinados controles têm eventos específicos de arrastar personalizados. Os controles ListView e TreeView, por exemplo, têm um evento ItemDrag.
Para iniciar uma operação de arrastar
No evento MouseDown para o controle em que a operação de arrastar começará, use o método
DoDragDroppara definir os dados a serem arrastados e o efeito permitido que a operação de arrastar terá. Para obter mais informações, consulte Data e AllowedEffect.O exemplo a seguir mostra como iniciar uma operação de arrastar. O controle onde o arrastar começa é um controle Button, os dados que estão sendo arrastados são a cadeia de caracteres que representa a propriedade Text do controle Button, e os efeitos permitidos são de cópia ou movimentação.
Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown Button1.DoDragDrop(Button1.Text, DragDropEffects.Copy Or DragDropEffects.Move) End Subprivate void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { button1.DoDragDrop(button1.Text, DragDropEffects.Copy | DragDropEffects.Move); }Observação
Todos os dados podem ser usados como um parâmetro no método
DoDragDrop; no exemplo acima, a propriedade Text do controle Button foi usada (em vez de codificar um valor ou recuperar dados de um conjunto de dados) porque a propriedade estava relacionada ao local que estava sendo arrastado (o controle Button). Tenha isso em mente ao incorporar operações de arrastar e soltar em seus aplicativos baseados no Windows.
Enquanto uma operação de arrastar estiver em vigor, você pode lidar com o evento QueryContinueDrag, que "pede permissão" do sistema para continuar a operação de arrastar. Ao lidar com esse método, esse também é o ponto apropriado para você chamar métodos que terão um efeito sobre a operação de arrastar, como expandir um TreeNode em um controle TreeView quando o cursor estiver sobre ele.
Descartando dados
Depois de começar a arrastar dados de um lugar em um formulário ou controle no Windows, você naturalmente desejará soltá-los em algum lugar. O cursor mudará ao cruzar uma área de um formulário ou controle que esteja configurado corretamente para receber os dados soltados. Qualquer área dentro de um formulário ou controle do Windows pode ser feita para aceitar dados descartados definindo a propriedade AllowDrop e tratando os eventos DragEnter e DragDrop.
Para executar uma operação de soltar
Defina a propriedade AllowDrop como true.
No evento
DragEnterpara o controle em que a queda ocorrerá, verifique se os dados que estão sendo arrastados são de um tipo aceitável (nesse caso, Text). Em seguida, o código define o efeito que ocorrerá quando a queda ocorrer para um valor na enumeração DragDropEffects. Para obter mais informações, consulte Effect.Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Subprivate void textBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }Observação
Você pode definir seu próprio DataFormats especificando seu próprio objeto como o parâmetro Object do método SetData. Certifique-se de que, ao fazer isso, o objeto especificado seja serializável. Para obter mais informações, consulte ISerializable.
No evento DragDrop para o controle em que ocorrerá a queda, use o método GetData para recuperar os dados que estão sendo arrastados. Para obter mais informações, consulte Data.
No exemplo a seguir, um controle TextBox é o controle que será o destino da ação de arrastar (onde ocorrerá a soltura). O código define a propriedade Text do controle TextBox igual aos dados que estão sendo arrastados.
Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = e.Data.GetData(DataFormats.Text).ToString End Subprivate void textBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { textBox1.Text = e.Data.GetData(DataFormats.Text).ToString(); }Observação
Além disso, você pode trabalhar com a propriedade KeyState, de modo que, dependendo das chaves pressionadas durante a operação de arrastar e soltar, determinados efeitos ocorram (por exemplo, é padrão copiar os dados arrastados quando a tecla CTRL é pressionada).
Consulte também
.NET Desktop feedback