visual tutorial studio que descargar .net winforms

.net - tutorial - winforms que es



¿Cómo puedo saber si un Drag Drop ha finalizado en Winforms? (1)

No obtuve compradores y finalmente me di cuenta de esto.

La respuesta es monitorear el evento QueryContinueDrag. Este evento se dispara continuamente durante la operación de arrastrar y soltar. QueryContinueDragEventArgs contiene una propiedad de acción de tipo enum DragAction, que es DragAction.Cancel, DragAction.Drop o DragAction.Continue. Es una propiedad de lectura / escritura para permitirle cambiar el comportamiento estándar (no lo necesitamos).

Este código de ejemplo asume que el indicador DragDropInProgress se establece al comienzo de una operación de arrastrar y se reinicia cuando se completa con éxito una operación de arrastrar y soltar. Detecta una terminación de DragDrop porque el usuario ha soltado el mouse sin estar sobre un destino de arrastre (los destinos de arrastre son MyControl1 y MyControl2) o cancela la acción de arrastrar. Si no le importa si el DragDropInProgressFlag se restablece antes de que se desencadenen los eventos de DragDrop, puede prescindir de la prueba de aciertos y simplemente reiniciar el indicador.

Private Sub MyControl_QueryContinueDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.QueryContinueDragEventArgs) Handles MyControl.QueryContinueDrag Dim MousePointerLocation As Point = MousePosition If e.Action = DragAction.Cancel Then '''' User pressed the Escape button DragDropInProgressFlag = False End If If e.Action = DragAction.Drop Then If Not HitTest(new {MyControl1, MyControl2}, MousePointerLocation) Then DragDropInProgressFlag = False End If End If End Sub Private Function HitTest(ByVal ctls() As Control, ByVal p As Point) As Boolean HitTest = False For Each ctl In ctls Dim ClientPoint As Point = ctl.PointToClient(p) HitTest = HitTest Or (ClientPoint.X >= 0 AndAlso ClientPoint.Y >= 0 AndAlso ClientPoint.X <= ctl.Width AndAlso ClientPoint.Y <= ctl.Height) If HitTest Then Exit For Next End Function

En este ejemplo, HitTest es un rountine que toma la posición de un Mouse (coordenadas de pantalla) y una matriz de controles y filtra a través de la matriz pasando True si la posición del mouse está en cualquiera de los rectángulos de control.

¿Cómo puedo saber si Drop Drop ha terminado WinForms .net. Necesito detener una parte de mi formulario para que no actualice su vista de los datos cuando está en progreso una caída de arrastre.

Intenté usar una bandera, pero parece que no capturo todos los eventos que necesito para mantener la bandera sincronizada con el progreso de la acción de arrastrar y soltar. Específicamente, no puedo decir cuándo termina la operación de arrastre sin que se complete una operación de arrastrar, es decir, cuando el usuario suelta el elemento en un control con allow drop = false, o cuando el usuario presiona la tecla ESC.

He visto esta pregunta:

Comprueba si hay una operación de arrastrar y soltar en progreso

Pero no aborda mi problema satisfactoriamente (si alguien me da la respuesta a esta pregunta, responderé esa con la respuesta junto con lo que ya tengo).