Instruções passo a passo: executando uma operação de arrastar e soltar no Windows Forms

Para executar operações de arrastar e soltar em aplicativos baseados no Windows, você deve manipular uma série de eventos, principalmente o DragEnter, DragLeavee DragDrop eventos. 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 permitir que os dados sejam coletados quando o arrastar começa é implementada DoDragDrop no método.

No exemplo a seguir, o evento é 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 MouseDown botão do mouse 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 ListView controles e TreeView , por exemplo, têm um ItemDrag evento.

Para iniciar uma operação de arrastar

  1. MouseDown No caso para o controle onde o arrasto começará, use o método para definir os dados a serem arrastados e o DoDragDrop efeito permitido que o arrasto 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 arrasto começa é um Button controle, os dados que estão sendo arrastados são a cadeia de caracteres que representa a TextButton propriedade do controle e os efeitos permitidos estão copiando ou movendo.

    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 Sub  
    
    private void button1_MouseDown(object sender,
    System.Windows.Forms.MouseEventArgs e)  
    {  
       button1.DoDragDrop(button1.Text, DragDropEffects.Copy |
          DragDropEffects.Move);  
    }  
    

    Observação

    Quaisquer dados podem ser usados como um parâmetro no método, no DoDragDrop exemplo acima, a TextButton propriedade do controle foi usada (em vez de codificar um valor ou recuperar dados de um conjunto de dados) porque a propriedade estava relacionada ao local do qual estava sendo arrastado (o Button controle). Lembre-se disso ao incorporar operações do tipo "arrastar e soltar" em seus aplicativos baseados em Windows.

Enquanto uma operação de arrastar está em vigor, você pode manipular o QueryContinueDrag evento, que "pede permissão" do sistema para continuar a operação de arrastar. Ao manipular esse método, ele também é o ponto apropriado para você chamar métodos que terão um efeito na operação de arrastar, como expandir um em um TreeNodeTreeView controle quando o cursor passa sobre ele.

Descartando dados

Depois de começar a arrastar dados de um local em um Formulário ou controle do 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 Windows Form ou controle pode ser feita para aceitar dados descartados definindo a AllowDrop propriedade e manipulando os DragEnter eventos e DragDrop .

Para executar uma operação de soltar

  1. Defina a AllowDrop propriedade como true.

  2. No caso do DragEnter controle onde a queda ocorrerá, certifique-se de que os dados que estão sendo arrastados sejam de um tipo aceitável (neste caso, Text). Em seguida, o código define o efeito que acontecerá quando a queda ocorrer para um valor na DragDropEffects enumeração. 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 Sub  
    
    private 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 objeto especificando seu próprio DataFormats objeto como o Object parâmetro do SetData método. Ao fazer isso, verifique se o objeto especificado é serializável. Para obter mais informações, consulte ISerializable.

  3. No caso do DragDrop controle onde a queda ocorrerá, use o GetData método para recuperar os dados que estão sendo arrastados. Para obter mais informações, consulte Data.

    No exemplo abaixo, um TextBox controle é o controle que está sendo arrastado para (onde a queda ocorrerá). O código define a TextTextBox propriedade do controle 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 Sub  
    
    private 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, de modo que, dependendo das teclas pressionadas durante a operação de arrastar e soltar, determinados efeitos ocorram (por exemplo, é padrão copiar os dados arrastados quando a KeyState tecla CTRL é pressionada).

Confira também