Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para realizar operaciones de arrastrar y soltar en aplicaciones basadas en Windows, debe controlar una serie de eventos, en particular los eventos DragEnter, DragLeave y DragDrop. Al trabajar con la información disponible en los argumentos de evento de estos eventos, puede facilitar fácilmente las operaciones de arrastrar y colocar.
Arrastrar datos
Todas las operaciones de arrastrar y colocar comienzan con el arrastre. La funcionalidad para habilitar la recopilación de datos cuando comienza el arrastre se implementa en el método DoDragDrop.
En el ejemplo siguiente, la acción del MouseDown evento se usa para iniciar la operación de arrastre porque es la más intuitiva (la mayoría de las acciones de arrastrar y soltar comienzan al presionar el botón del ratón). Sin embargo, recuerde que cualquier evento podría usarse para iniciar un procedimiento de arrastrar y colocar.
Nota:
Algunos controles tienen eventos específicos de arrastre personalizados. Los controles ListView y TreeView, por ejemplo, tienen un evento ItemDrag.
Para iniciar una operación de arrastre
En el caso del MouseDown control en el que comenzará la arrastrar, use el
DoDragDrop
método para establecer los datos que se van a arrastrar y el efecto permitido que se arrastre tendrá. Para obtener más información, vea Data y AllowedEffect.En el ejemplo siguiente se muestra cómo iniciar una operación de arrastre. El control donde comienza el arrastre es un Button, los datos que se arrastran son la cadena que representa la propiedad Text del control Button, y los efectos permitidos son copiar o 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); }
Nota:
Cualquier dato se puede usar como parámetro en el método
DoDragDrop
; en el ejemplo anterior se utilizó la propiedad Text del control Button (en lugar de fijar un valor o recuperar datos de un conjunto de datos) porque la propiedad estaba relacionada con la ubicación desde la que se arrastra (el control Button). Tenga en cuenta esto a medida que incorpora operaciones de arrastrar y colocar en las aplicaciones basadas en Windows.
Mientras una operación de arrastre está en curso, puede controlar el evento QueryContinueDrag, que "solicita permiso" del sistema para continuar con la operación de arrastre. Al manejar este método, también es el punto adecuado para llamar a métodos que tendrán un efecto en la operación de arrastre, como expandir un TreeNode en un TreeView control cuando el cursor pasa sobre él.
Quitar datos
Una vez que haya comenzado a arrastrar datos desde una ubicación en un Windows Form o control, naturalmente querrá dejarlos en algún lugar. El cursor cambiará cuando cruce un área de un formulario o control configurado correctamente para quitar datos. Cualquier área dentro de un formulario de Windows Forms o control se puede configurar para que acepte datos arrastrados estableciendo la propiedad AllowDrop y manejando los eventos DragEnter y DragDrop.
Para realizar una entrega
Establezca la AllowDrop propiedad en true.
En el evento del
DragEnter
control donde se producirá la colocación, asegúrese de que los datos que se arrastran sean de un tipo aceptable (en este caso, Text). A continuación, el código establece el efecto que se producirá cuando se produzca la colocación en un valor de la DragDropEffects enumeración. Para obtener más información, 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; }
Nota:
Puede definir su propio DataFormats objeto especificando su propio objeto como parámetro Object del SetData método . Asegúrese de que, al hacerlo, el objeto especificado es serializable. Para obtener más información, consulte ISerializable.
En el evento del control DragDrop en el que se producirá la ubicación, use el método GetData para recuperar los datos que están siendo arrastrados. Para obtener más información, consulte Data.
En el ejemplo siguiente, un TextBox control es el control al que se arrastra (donde se realizará la caída). El código establece la Text propiedad del TextBox control igual a los datos que se arrastran.
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(); }
Nota:
Además, puede trabajar con la KeyState propiedad para que, dependiendo de las teclas deprimidas durante la operación de arrastrar y colocar, se produzcan ciertos efectos (por ejemplo, es estándar copiar los datos arrastrados cuando se presiona la tecla CTRL).
Consulte también
.NET Desktop feedback