¿Cómo puedo ... implementar Drag-n-Drop en aplicaciones C #?

  • Mark Wilkinson
  • 0
  • 2371
  • 728

Los usuarios de Windows se han acostumbrado a la convención de arrastrar y soltar, en la que hace clic en un elemento y lo arrastra a otra ubicación / programa para moverlo, copiarlo o modificarlo. Si es un desarrollador de aplicaciones para el entorno de Windows que utiliza .NET Framework, necesita saber cómo programar la funcionalidad de arrastrar y soltar.

Esta publicación de blog también está disponible en formato PDF en una descarga TechRepublic, que incluye un archivo de proyecto de Visual Studio de muestra con todo el código de muestra mencionado.

Los eventos de arrastre

Hay dos eventos principales que utilizaremos para implementar arrastrar y soltar. Estos eventos son DragEnter y DragDrop. Ambos eventos se establecerán en el objeto de destino al que el usuario arrastrará otros objetos. En nuestro caso, este objeto de destino es un panel llamado pnlDragTo. Este es un control de Panel C # normal colocado en un Formulario normal. Esta forma y control se muestran en Figura A.

Figura A

Control de panel C # en un formulario normal

El control pnlDragTo está cerca de la parte superior del formulario y es de color gris oscuro. Para permitir a los usuarios arrastrar objetos a este panel, debemos hacer tres cosas:

  1. Establezca la propiedad AllowDrop del control en True: si no se establece, el usuario no podrá soltar objetos en el control.
  2. Configure un controlador de eventos para el evento DragEnter: este evento se usará para determinar si el objeto que se arrastra al panel es compatible con la funcionalidad de arrastrar y soltar del panel.
  3. Configure un controlador de eventos para el evento DragDrop: este evento se activa cuando un usuario suelta un objeto en el panel.

Manejando el evento DragEnter

El evento DragEnter se activa cada vez que el usuario arrastra un objeto sobre su panel. Podrías usar este evento para muchas cosas diferentes. Por ejemplo, podría usar esto junto con los eventos DragLeave y DragDrop para cambiar el color del panel a medida que un usuario arrastra objetos sobre él. Este es un buen truco de interfaz de usuario que utilizan muchas aplicaciones para alertar al usuario de que pueden soltar objetos en un componente.

Sin embargo, lo mantendremos simple y utilizaremos el evento DragEnter como una oportunidad para examinar el objeto que el usuario arrastra a nuestro panel. Para hacerlo, utilizaremos el objeto DragEventArgs que se envía a nuestro controlador de eventos para ver si los datos del objeto que arrastra el usuario corresponden a un archivo. El código para esto se muestra en Figura B.

Figura B

Arrastrar

La llamada a e.Data.GetDataPresent es lo que nos dice con qué tipo de datos estamos tratando. En este caso, queremos saber si los datos corresponden a un archivo que se coloca en nuestro panel. Para hacer esto, enviamos el valor FileDrop del objeto DataFormats al método GetDataPresent. Si los datos corresponden a un archivo, el método GetDataPresent devolverá verdadero, de lo contrario devolverá falso.

Si se devuelve un valor verdadero de GetDataPresent, establecemos el efecto en Move, de lo contrario, establecemos el efecto en None. Hacer esto le da al usuario una alerta visual para indicar que el objeto puede o no caerse en nuestro panel.

Manejando el evento DragDrop

El próximo evento con el que trabajaremos es el evento DragDrop. Este evento se dispara cuando el usuario suelta el botón del mouse y el objeto se "suelta" en nuestro panel. En general, este evento se utiliza para examinar el objeto que se soltó y realizar algún tipo de funcionalidad en él. Para este artículo, utilizaremos el evento DragDrop para determinar si el objeto que se cae es un archivo y, si lo es, mostrar la información asociada con el archivo. El código para esto se muestra en Figura C y la salida se muestra en Figura D.

Figura C

Arrastrar y soltar

Figura D

Información del archivo de salida

Como puede ver, aquí usamos el mismo método GetDataPresent que usamos en el evento DragEnter. Esto se debe a que necesitamos examinar el objeto que se cae y asegurarnos de que sea del tipo correcto.

Si el objeto es del tipo correcto, llamamos DragEventArgs.Data.GetData método y dile que estamos buscando datos de FileDrop. Este método GetData devuelve una matriz de cadenas. El uso de una matriz de cadenas permite al programa manejar múltiples archivos que se descartan al mismo tiempo. Cada cadena dentro de la matriz es la ruta completa a un archivo que se incluyó en la caída.

Luego recorremos la matriz y obtenemos la información para cada uno de los archivos incluidos dentro de la matriz. Esto se hace creando un nuevo objeto FileInfo para cada archivo y accediendo a las propiedades necesarias.

Otros tipos de arrastrar y soltar

Si bien el código que se muestra maneja los archivos, es igual de fácil implementar arrastrar y soltar para otros tipos de objetos. Para hacer esto, reemplace DataFormats.FileDrop con cualquier tipo de objeto que desee aceptar.




Nadie ha comentado sobre este artículo todavía.

¡Consejos, información útil y las últimas noticias del mundo de la tecnología!
Información útil y las últimas novedades tecnológicas de todo el mundo. Revisiones en video de teléfonos, tabletas y computadoras.