Partilhar via


Demonstra Passo a passo: Executar uma operação de do tipo arrastar e soltar no Windows Forms

Para executar operações de arrastar-e-soltar em aplicativos baseados no Windows você precisa lidar uma série de eventos, mais especialmente os eventos DragEnter, DragLeave e DragDrop.Trabalhando com as informações disponíveis nos argumentos deste evento, você pode facilmente orientar as operações de arrastar-e-soltar.

Arrastando Dados

Todas as operações de arrastar-e-soltar começam com arrastar.A funcionalidade de permitir que dados sejam coletados quando o arrastamento começa é implementada no método DoDragDrop.

No exemplo a seguir, o evento MouseDown é usado para iniciar a operação de arrastar porque ele é o mais intuitivo (a maioria das ações arrastar-e-soltar começa com o botão do mouse sendo pressionado).No entanto, lembre-se de que qualquer evento pode ser utilizado para iniciar um procedimento de arrastar-e-soltar.

Observação:

Certos controles tem eventos personalizados específicos de arrastar.O ListView e TreeView controles, por exemplo, tem um ItemDrag evento.

Para iniciar uma operação de arrastar

  • No evento MouseDown do controle onde o arrastamento começará, use o método DoDragDrop para definir os dados a serem arrastados e o efeito permitido para o arrastamento.Para obter mais informações, consulte Data e AllowedEffect.

    O exemplo a seguir mostra como iniciar um operação de arrastar.O controle onde o arrastamento começa é um controle Button, os dados que estão sendo arrastados são a sequência de caracteres que representa a propriedade Text do controle Button, e os efeitos permitidos são copiar ou mover.

    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);
    }
    
    private void button1_MouseDown(Object sender,
    System.Windows.Forms.MouseEventArgs e)
    {
       button1.DoDragDrop(button1.get_Text(), DragDropEffects.Copy |
          DragDropEffects.Move);
    }
    
    Observação:

    Todos sistema autônomo dados podem ser usados sistema autônomo um parâmetro na DoDragDrop método; no exemplo acima, o Text propriedade das Button o controle foi usado (em vez de embutir um valor ou recuperar dados de um dataset) como a propriedade foi relacionada no local que está sendo arrastado do (a Button controle). Tenha isso em mente quando você incorporar operações de arrastar-e-soltar em seus aplicativos baseados no Windows.

Enquanto uma operação de arrastar estiver em vigor, você pode manipular o evento QueryContinueDrag, 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 sobre a operação de arrastar, com expandir uma TreeNode em um controle TreeView quando o cursor passa sobre ele.

Soltando Dados

Após você ter começou a arrastar dados a partir de um local em um Formulário do Windows ou controle, você naturalmente desejará soltá-lo em algum lugar.O cursor será alterado ao cruzar uma área de um formulário ou controle que está configurado corretamente para nele soltar dados.Qualquer área em um Formulário do Windows ou controle pode ser feita para aceitar dados soltos, definindo a propriedade AllowDrop e manipulando os eventos DragEnter e DragDrop.

Para executar uma operação de soltar

  1. Defina a propriedade AllowDrop como true.

  2. No evento DragEnter para o controle onde os dados serão soltos, verifique se os dados que estão sendo arrastados são de um tipo aceitável (neste caso, Text).O código então define o efeito que acontecerá quando ocorre a operação de soltar 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 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;
    }
    
    private void textBox1_DragEnter(Object sender,
    System.Windows.Forms.DragEventArgs e)
    {
       if (e.get_Data().GetDataPresent(DataFormats.Text))
          e.set_Effect(DragDropEffects.Copy);
       else
          e.set_Effect(DragDropEffects.None);
    }
    
    Observação:

    Você pode definir seus próprios DataFormats especificando seu próprio objeto sistema autônomo o Object parâmetro das SetData método. Certifique se de que, ao fazer isso, o objeto especificado é serializável.Para obter mais informações, consulte interface ISerializable.

  3. No evento DragDrop do controle onde a operação de soltar irá ocorrer, use o método GetData para recuperar os dados que estão sendo arrastados.Para mais informações, consulte DtaObject.Data Property.

    No exemplo a seguir, um controle TextBox é o controle sendo arrastado para (onde a operação de soltar irá ocorrer).O código define a propriedade Text do controle TextBox igual aos dados que está 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();
    }
    
    private void textBox1_DragDrop(Object sender,
    System.Windows.Forms.DragEventArgs e)
    {
       textBox1.set_Text
    (e.get_Data().GetData(DataFormats.Text).ToString());
    }
    
    Observação:

    Além disso, você pode trabalhar com o KeyState propriedade, de modo que, dependendo das chaves pressionado durante a operação de do tipo arrastar e soltar, determinados efeitos ocorrem (por exemplo, é padrão para copiar os dados arrastados quando é pressionada a tecla CTRL).

Consulte também

Tarefas

Como: Adicionar dados para a área de transferência

Como: Recuperar dados da área de transferência

Outros recursos

Operações de Arrastar e Soltar e Suporte à Área de Transferência