Visão geral do comportamento de arrastar e soltar do mouse (Windows Forms .NET)

O Windows Forms incluem um conjunto de métodos, eventos e classes que implementam o comportamento do tipo "arrastar e soltar". Este tópico fornece uma visão geral do suporte a arrastar e soltar no Windows Forms.

Importante

A documentação do Guia da Área de Trabalho para .NET 7 e .NET 6 está em construção.

Eventos de arrastar e soltar

Há duas categorias de eventos em uma operação de arrastar e soltar: os eventos que ocorrem no destino atual da operação do tipo "arrastar e soltar" e eventos que ocorrem na fonte da operação de arrastar e soltar. Para executar operações de arrastar e soltar, você deve manipular esses 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".

Eventos no destino de queda atual

A tabela a seguir mostra os eventos que ocorrem no destino atual de uma operação do tipo "arrastar e soltar".

Evento de mouse Descrição
DragEnter Esse evento ocorre quando um objeto é arrastado para os limites do controle. O manipulador desse evento recebe um argumento do tipo DragEventArgs.
DragOver Esse evento ocorre quando um objeto é arrastado enquanto o ponteiro do mouse está dentro dos limites do controle. O manipulador desse evento recebe um argumento do tipo DragEventArgs.
DragDrop Esse evento ocorre quando uma operação do tipo "arrastar e soltar" é concluída. O manipulador desse evento recebe um argumento do tipo DragEventArgs.
DragLeave Esse evento ocorre quando um objeto é arrastado para fora dos limites do controle. O manipulador desse evento recebe um argumento do tipo EventArgs.

A DragEventArgs classe fornece o local do ponteiro do mouse, o estado atual dos botões do mouse e das teclas modificadoras do teclado, os dados que estão sendo arrastados e os valores que especificam as operações permitidas pela origem do evento drag e DragDropEffects o efeito de soltar de destino para a operação.

Eventos na origem de recebimento

A tabela a seguir mostra os eventos que ocorrem na fonte atual de uma operação do tipo "arrastar e soltar".

Evento de mouse Descrição
GiveFeedback Esse evento ocorre durante uma operação de arrastar. Ele fornece uma indicação visual para o usuário que a operação do tipo "arrastar e soltar" está ocorrendo, como uma alteração no ponteiro do mouse. O manipulador desse evento recebe um argumento do tipo GiveFeedbackEventArgs.
QueryContinueDrag Esse evento é gerado durante uma operação do tipo "arrastar e soltar" e permite que a fonte de arrastar determine se a operação do tipo "arrastar e soltar" deve ser cancelada. O manipulador desse evento recebe um argumento do tipo QueryContinueDragEventArgs.

A QueryContinueDragEventArgs classe fornece o estado atual dos botões do mouse e das teclas modificadoras do teclado, um valor especificando se a tecla ESC foi pressionada e um DragAction valor que pode ser definido para especificar se a operação de arrastar e soltar deve continuar.

Executando arrastar e soltar

As operações de arrastar e soltar sempre envolvem dois componentes, a origem de arrastar e o destino de soltar. Para iniciar uma operação de arrastar e soltar, designe um controle como a origem e manipule o MouseDown evento. No manipulador de eventos, chame o DoDragDrop método que fornece os dados associados ao drop e ao valor a DragDropEffects .

Defina a propriedade do controle de destino definida como true para permitir que esse controle aceite uma operação de AllowDrop arrastar e soltar. O destino manipula dois eventos, primeiro um evento em resposta ao arrastar sobre o controle, como DragOver. E um segundo evento que é a própria ação de queda, DragDrop.

O exemplo a seguir demonstra um arrastar de um controle para um LabelTextBoxarquivo . Quando o arraste é concluído, o responde atribuindo o TextBox texto do rótulo a si mesmo.

// Initiate the drag
private void label1_MouseDown(object sender, MouseEventArgs e) =>
    DoDragDrop(((Label)sender).Text, DragDropEffects.All);

// Set the effect filter and allow the drop on this control
private void textBox1_DragOver(object sender, DragEventArgs e) =>
    e.Effect = DragDropEffects.All;

// React to the drop on this control
private void textBox1_DragDrop(object sender, DragEventArgs e) =>
    textBox1.Text = (string)e.Data.GetData(typeof(string));
' Initiate the drag
Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs)
    DoDragDrop(DirectCast(sender, Label).Text, DragDropEffects.All)
End Sub

' Set the effect filter and allow the drop on this control
Private Sub TextBox1_DragOver(sender As Object, e As DragEventArgs)
    e.Effect = DragDropEffects.All
End Sub

' React to the drop on this control
Private Sub TextBox1_DragDrop(sender As Object, e As DragEventArgs)
    TextBox1.Text = e.Data.GetData(GetType(String))
End Sub

Para obter mais informações sobre os efeitos de arrastar, consulte Data e AllowedEffect.

Confira também