He visto esto en el entorno Turbo C ++ de Borland , pero no estoy seguro de cómo hacerlo para una aplicación C # en la que estoy trabajando. ¿Hay mejores prácticas o trampas a tener en cuenta?
c#
winforms
drag-and-drop
Uwe Keim
fuente
fuente
Respuestas:
Algún código de muestra:
fuente
io.File
(string[])
seguro el yeso para cualquierFileDrop
caída con formato? Es decir, ¿es posible generar unFileDrop
que provocará una excepción de lanzamiento ilegalstring[]
? Tengo problemas para descifrar eso de los documentos .Tenga en cuenta los derechos de seguridad de Windows Vista / Windows 7: si está ejecutando Visual Studio como administrador, no podrá arrastrar archivos desde una ventana del explorador que no sea administrador a su programa cuando lo ejecute desde Visual Studio. ¡Los eventos relacionados con la resistencia ni siquiera se dispararán! Espero que esto ayude a alguien más a no perder horas de su vida ...
fuente
En Windows Forms, configure la propiedad AllowDrop del control, luego escuche el evento DragEnter y el evento DragDrop.
Cuando se
DragEnter
desencadena el evento, establezca los argumentosAllowedEffect
en algo diferente a ninguno (por ejemploe.Effect = DragDropEffects.Move
).Cuando
DragDrop
se active el evento, obtendrá una lista de cadenas. Cada cadena es la ruta completa al archivo que se descarta.fuente
Necesitas estar al tanto de una trampa. Cualquier clase que pase como DataObject en la operación de arrastrar / soltar debe ser serializable. Entonces, si intenta pasar un objeto y no funciona, asegúrese de que se pueda serializar, ya que ese es casi seguro el problema. ¡Esto me ha pillado un par de veces!
fuente
Otro problema más:
El código marco que llama a los eventos de arrastre se traga todas las excepciones. Puede pensar que su código de evento se ejecuta sin problemas, mientras que está generando excepciones por todas partes. No puedes verlos porque el marco los roba.
Es por eso que siempre pongo un try / catch en estos controladores de eventos, solo para saber si lanzan alguna excepción. Usualmente pongo un Debugger.Break (); en la parte de captura.
Antes del lanzamiento, después de la prueba, si todo parece comportarse, elimino o reemplazo estos con un manejo de excepciones real.
fuente
Otro problema común es pensar que puede ignorar los eventos Form DragOver (o DragEnter). Normalmente uso el evento DragOver del formulario para establecer el efecto permitido y luego el evento DragDrop de un control específico para manejar los datos descartados.
fuente
Aquí hay algo que solía soltar archivos y / o carpetas llenas de archivos. En mi caso, estaba filtrando
*.dwg
solo archivos y elegí incluir todas las subcarpetas.fileList
es unIEnumerable
o similar En mi caso estaba vinculado a un control WPF ...Consulte https://stackoverflow.com/a/19954958/492 para obtener detalles sobre ese truco.
The Drop Handler ...
fuente
La solución de Judah Himango y Hans Passant está disponible en el Diseñador (actualmente estoy usando VS2015):
fuente
Puede implementar Drag & Drop en WinForms y WPF.
Debe agregar el evento mousemove:
Debe agregar el evento DragDrop:
private void YourElementControl_DragDrop (remitente del objeto, DragEventArgs e)
Fuente con código completo .
fuente