soltar - mover un form sin barra de titulo c#
¿Cómo puedo saber si una operación de arrastrar y soltar falló? (3)
Ah, creo que lo tengo. Resulta que la llamada a DoDragDrop es realmente sincrónica (cuán coja), y devuelve un valor de DragDropEffects
, que se establece en None
si la operación falla. Básicamente, esto significa que la aplicación (o al menos el hilo de UI) se congelará mientras el usuario esté en medio de un arrastre. Esa no parece una solución muy elegante para mí.
Ok cz_dl Veo que acabas de publicar eso mismo, así que te daré la respuesta.
Sin embargo, esto no lo entiendo: ¿cómo puede el destino determinar si la operación debería ser un movimiento o una copia? ¿No debería ser eso de la aplicación de origen?
Me parece que no hay forma de detectar si una operación de arrastre fue exitosa o no, pero debe haber alguna forma. Supongamos que quiero realizar un "movimiento" desde la fuente hasta el destino. Si el usuario suelta el mouse sobre alguna aplicación o control que no puede aceptar la caída, ¿cómo puedo saberlo?
Para el caso, ¿cómo puedo saber cuándo se completa el arrastre?
Vi esta pregunta , pero su solución no funciona para mí, y e. La e.Action
es siempre Continue
.
No estoy seguro si eso puede ayudarlo, pero el método DoDragDrop devuelve el valor final de DragDropEffects.
var ret = DoDragDrop( ... );
if(ret == DragDropEffects.None) //not successfull
else // etc.
No se puede agregar un comentario todavía, por lo que otra respuesta. También me sorprendió cuando vi por primera vez, que DoDragDrop se llama sincrónicamente y de alguna manera no congela la IU.
Pero las cosas de copiar / mover, creo, son perfectamente lógicas. Puede especificar los efectos permitidos mientras llama al método DoDragDrop en la aplicación fuente y eso es todo lo que es importante para usted. Cómo manejará la aplicación de destino y usará los datos que le corresponden.