c# - Comprueba si hay una operación de arrastrar y soltar en progreso
winforms drag-and-drop (4)
Asumiendo que está en el contexto de solo su propio código, puede identificar todos los lugares en su código donde ocurre una operación de arrastrar / soltar, y establecer un indicador booleano global en verdadero durante la operación, luego volver a falso después de que termine.
Entonces, la siguiente pregunta es, ¿cómo se inician las operaciones de arrastrar / soltar en su aplicación?
¿Hay alguna manera de verificar si un arrastre y soltar está en progreso? Algún método o api win32 que se puede comprobar? Sé que puedo configurar AllowDrop y usar eventos, pero no funciona en este caso. Básicamente quiero verificar, con código, si hay alguna función de arrastrar y soltar en curso.
La función GetCapture API podría ser un buen comienzo. Básicamente, cuando se inicia una operación de arrastre, la ventana de origen "captura" el mouse, lo que significa que seguirá recibiendo todos los eventos del mouse, incluso si el mouse sale de la ventana.
Sin embargo, las aplicaciones también pueden capturar el mouse por otros motivos, por lo que no es 100% confiable. Puedes probarlo y ver qué tan bien te funciona. Y con las aplicaciones haciendo su propio manejo de arrastrar y soltar, no hay manera de estar seguros de lo que está pasando de todos modos.
¿Qué pasa con el controlador de eventos QueryContinueDrag http://msdn.microsoft.com/en-us/library/system.windows.forms.control.querycontinuedrag.aspx ? Puede conectar un controlador a cualquier control y verificar si hay una operación de arrastrar y soltar en curso y luego cancelarla si lo desea.
Ooops, lo siento, acabo de ver que el hombre que estaba frente a mí ya lo mencionó. Yo mal.
Tenía una pregunta similar que me contesté a mí mismo (después de algunas horas jugando) Ver - ¿Cómo puedo saber si un Arrastrar Gota ha terminado en Winforms? .
Básicamente, si lo hace como Earwicker sugiere que necesita establecer la bandera cuando la gota de arrastre comienza cerca de la llamada DoDragDrop. Deberá desactivar el indicador tanto en el evento DragDrop como en QueryContinueDrag si QueryContinueDragEventArgs indica un drop o un cancel.