Compartir a través de


Información general sobre el comportamiento del mouse de arrastrar y colocar (Windows Forms para .NET)

Windows Forms incluye un conjunto de métodos, eventos y clases que implementan el comportamiento de arrastrar y colocar. En este tema se proporciona una introducción a la compatibilidad para arrastrar y colocar en Windows Forms.

Eventos de arrastrar y colocar

Hay dos categorías de eventos en una operación de arrastrar y colocar: eventos que se producen en el destino actual de la operación de arrastrar y colocar, y eventos que se producen en el origen de la operación de arrastrar y colocar. Para realizar operaciones de arrastrar y colocar, debe controlar estos eventos. Trabajando con la información disponible en los argumentos de estos eventos, puede facilitar sin problemas las operaciones de arrastrar y colocar.

Eventos en el destino para colocar actual

En la tabla siguiente se muestran los eventos que se producen en el destino actual de una operación de arrastrar y colocar.

Evento del mouse Descripción
DragEnter Este evento se produce cuando se arrastra un objeto dentro de los límites del control. El controlador de este evento recibe un argumento del tipo DragEventArgs.
DragOver Este evento se produce cuando se arrastra un objeto mientras el puntero del mouse está dentro de los límites del control. El controlador de este evento recibe un argumento del tipo DragEventArgs.
DragDrop Este evento se produce cuando se completa una operación de arrastrar y colocar. El controlador de este evento recibe un argumento del tipo DragEventArgs.
DragLeave Este evento se produce cuando se arrastra un objeto fuera de los límites del control. El controlador de este evento recibe un argumento del tipo EventArgs.

La clase DragEventArgs proporciona la ubicación del puntero del mouse, el estado actual de los botones del mouse y las teclas modificadoras del teclado, los datos que se están arrastrando y valores DragDropEffects que especifican las operaciones permitidas por el origen del evento de arrastrar y el efecto de colocar en el destino de la operación.

Eventos en el origen para colocar

En la tabla siguiente se muestran los eventos que se producen en el origen de la operación de arrastrar y colocar.

Evento del mouse Descripción
GiveFeedback Este evento se produce durante una operación de arrastre. Ofrece la oportunidad de dar una indicación visual al usuario de que se está produciendo la operación de arrastrar y colocar, por ejemplo, cambiar el puntero del mouse. El controlador de este evento recibe un argumento del tipo GiveFeedbackEventArgs.
QueryContinueDrag Este evento se produce durante una operación de arrastrar y colocar, y permite al origen de arrastre determinar si la operación de arrastrar y colocar tiene que cancelarse. El controlador de este evento recibe un argumento del tipo QueryContinueDragEventArgs.

La clase QueryContinueDragEventArgs proporciona el estado actual de los botones del mouse y las teclas modificadoras del teclado, un valor que especifica si se presionó la tecla ESC y un valor DragAction que se puede establecer para especificar si la operación de arrastrar y colocar debe continuar.

Realización de operaciones de arrastrar y colocar

Las operaciones de arrastrar y colocar siempre implican dos componentes, el origen de arrastre y el destino para colocar. Para iniciar una operación de arrastrar y colocar, designe un control como el origen y controle el evento MouseDown. En el controlador de eventos, llame al método DoDragDrop y proporcione los datos asociados a la colocación y un valor de DragDropEffects.

Establezca la propiedad AllowDrop del control de destino establecida en true para permitir que acepte una operación de arrastrar y colocar. El destino controla dos eventos, el primero en respuesta al arrastre sobre el control, como DragOver. Y un segundo evento que es la propia acción de colocar, DragDrop.

En el ejemplo siguiente se muestra una operación de arrastrar desde un control Label a TextBox. Cuando se completa la operación de arrastrar, TextBox responde con la asignación del texto de la etiqueta a sí mismo.

// 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 obtener más información sobre los efectos de la operación de arrastrar, vea Data y AllowedEffect.

Vea también