Versión imprimible       Enviar     
Evaluar y enviar comentarios
MSDN
MSDN Library
 QueryContinueDrag (Evento)

  Encender vista de ancho de banda bajo
Esta página es específica de
Microsoft Visual Studio 2005/.NET Framework 2.0

Hay además otras versiones disponibles para:
Control.QueryContinueDrag (Evento)
Se produce durante una operación de arrastrar y colocar, y permite al origen de arrastre determinar si la operación de arrastrar y colocar tiene que cancelarse.

Espacio de nombres: System.Windows.Forms
Ensamblado: System.Windows.Forms (en system.windows.forms.dll)

Visual Basic (Declaración)
Public Event QueryContinueDrag As QueryContinueDragEventHandler
Visual Basic (Uso)
Dim instance As Control
Dim handler As QueryContinueDragEventHandler

AddHandler instance.QueryContinueDrag, handler
C#
public event QueryContinueDragEventHandler QueryContinueDrag
C++
public:
event QueryContinueDragEventHandler^ QueryContinueDrag {
    void add (QueryContinueDragEventHandler^ value);
    void remove (QueryContinueDragEventHandler^ value);
}
J#
/** @event */
public void add_QueryContinueDrag (QueryContinueDragEventHandler value)

/** @event */
public void remove_QueryContinueDrag (QueryContinueDragEventHandler value)
JScript
En JScript, se pueden controlar los eventos que define una clase, pero no se pueden definir unos propios.
XAML
No aplicable.

Se provoca el evento QueryContinueDrag cuando hay un cambio en el estado del teclado o de los botones del mouse durante una operación de arrastrar y colocar. El evento QueryContinueDrag permite al origen de arrastre determinar si la operación de arrastrar y colocar tiene que cancelarse.

A continuación, se describe cómo y cuándo se provocan eventos relacionados con operaciones de arrastrar y colocar.

El método DoDragDrop determina el control en la posición actual del cursor. A continuación, comprueba si el control es un destino (colocar) válido.

Si el control es un destino válido, se provoca el evento GiveFeedback con el efecto de arrastrar y colocar especificado. Para obtener una lista de efectos de arrastrar y colocar, vea la enumeración DragDropEffects.

Se realiza el seguimiento de la posición del cursor del mouse, del estado del teclado y del estado de los botones del mouse.

  • Si el usuario desplaza el mouse fuera de una ventana, se provoca el evento DragLeave.

  • Si el mouse entra en otro control, se provoca el evento DragEnter para ese control.

  • Si se mueve el mouse dentro del mismo control, se provoca el evento DragOver.

Si hay un cambio en el estado del teclado o de los botones del mouse, se produce el evento QueryContinueDrag y se determina si continúa la operación de arrastrar o colocar datos, o si se cancela la operación en función del valor de la propiedad Action de QueryContinueDragEventArgs del evento.

  • Si el valor de DragAction es Continue, se produce el evento DragOver para continuar con la operación y, con el nuevo efecto, se produce el evento GiveFeedback de forma que se pueda establecer la información visual apropiada. Para obtener una lista de efectos de colocar válidos, vea la enumeración DragDropEffects.

    NotaNota:

    Los eventos DragOver y GiveFeedback están emparejados de forma que cuando el mouse se desplace por el destino (colocar), el usuario reciba la información más actualizada sobre la posición del mouse.

  • Si el valor de DragAction es Drop, el valor del efecto de colocar se devuelve al origen para que la aplicación de origen pueda realizar la operación apropiada en los datos de origen; por ejemplo, cortar los datos si la operación es un movimiento.

  • Si el valor de DragAction es Cancel, se produce el evento DragLeave.

De forma predeterminada, el evento QueryContinueDrag establece la propiedad Action en Cancel en DragAction si se presiona la tecla ESC y establece Action en Drop en DragAction si se presiona el botón primario, secundario o central del mouse.

Para obtener más información sobre la forma de controlar eventos, vea Utilizar eventos.

En el ejemplo de código siguiente se muestra una operación de arrastrar y colocar entre dos controles ListBox. En el ejemplo se llama al método DoDragDrop cuando se inicia la acción de arrastrar. La acción de arrastrar se inicia si se ha movido el mouse más de SystemInformation.DragSize desde su ubicación durante el evento MouseDown. El método IndexFromPoint se utiliza para determinar el índice del elemento que se va a arrastrar durante el evento MouseDown.

En el ejemplo también se muestra la utilización de cursores personalizados para la operación de arrastrar y colocar. Este ejemplo requiere que haya dos archivos de cursor (3dwarro.cur y 3dwno.cur) en el directorio de la aplicación para los cursores personalizados de arrastrar y prohibición de colocar, respectivamente. Los cursores personalizados se utilizan si se ha activado UseCustomCursorsCheckCheckBox. Los cursores personalizados se establecen en el controlador de eventos GiveFeedback.

El estado del teclado se evalúa en el controlador de evento DragOver del control ListBox derecho, con el fin de determinar qué operación de arrastrar se realizará en función del estado de las teclas MAYÚS, CTRL, ALT o CTRL+ALT. La ubicación en ListBox donde se va a producir la operación de colocar también se determina durante el evento DragOver. Si los datos que se van a colocar no son de tipo String, el valor de la propiedad DragEventArgs.Effect se establece en None en DragDropEffects. Por último, el estado de la operación de colocar se muestra en DropLocationLabelLabel.

Los datos que se colocan para el ListBox correcto se determinan en el controlador de eventos DragDrop y el valor String se agrega a la ubicación apropiada de ListBox. Si la operación de arrastrar se realiza fuera de los límites del formulario, la operación de arrastrar y colocar se cancelará en el controlador de eventos QueryContinueDrag.

En este fragmento de código se muestra cómo utilizar el evento QueryContinueDrag. Para obtener el ejemplo completo del código, vea el método DoDragDrop.

Visual Basic
Private Sub ListDragSource_QueryContinueDrag(ByVal sender As Object, ByVal e As QueryContinueDragEventArgs) Handles ListDragSource.QueryContinueDrag
    ' Cancel the drag if the mouse moves off the form.
    Dim lb as ListBox = CType(sender, System.Windows.Forms.ListBox)

    If (lb isNot nothing) Then

        Dim f as Form = lb.FindForm()

        ' Cancel the drag if the mouse moves off the form. The screenOffset
        ' takes into account any desktop bands that may be at the top or left
        ' side of the screen.
        If (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) Or _
            ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) Or _
            ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) Or _
            ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) Then

            e.Action = DragAction.Cancel
        End If
    End if
End Sub
C#
private void ListDragSource_QueryContinueDrag(object sender, System.Windows.Forms.QueryContinueDragEventArgs e) {
    // Cancel the drag if the mouse moves off the form.
    ListBox lb = sender as ListBox;

    if (lb != null) {

        Form f = lb.FindForm();

        // Cancel the drag if the mouse moves off the form. The screenOffset
        // takes into account any desktop bands that may be at the top or left
        // side of the screen.
        if (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) ||
            ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) ||
            ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) ||
            ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) {

            e.Action = DragAction.Cancel;
        }
    }
}
C++
void ListDragSource_QueryContinueDrag( Object^ sender, System::Windows::Forms::QueryContinueDragEventArgs^ e )
{
   // Cancel the drag if the mouse moves off the form.
   ListBox^ lb = dynamic_cast<ListBox^>(sender);
   if ( lb != nullptr )
   {
      Form^ f = lb->FindForm();

      // Cancel the drag if the mouse moves off the form. The screenOffset
      // takes into account any desktop bands that may be at the top or left
      // side of the screen.
      if ( ((Control::MousePosition.X - screenOffset.X) < f->DesktopBounds.Left) || ((Control::MousePosition.X - screenOffset.X) > f->DesktopBounds.Right) || ((Control::MousePosition.Y - screenOffset.Y) < f->DesktopBounds.Top) || ((Control::MousePosition.Y - screenOffset.Y) > f->DesktopBounds.Bottom) )
      {
         e->Action = DragAction::Cancel;
      }
   }
}
J#
private void listDragSource_QueryContinueDrag(Object sender, 
    System.Windows.Forms.QueryContinueDragEventArgs e)
{
    // Cancel the drag if the mouse moves off the form.
    ListBox lb = (ListBox)sender;

    if (lb != null) {
        Form f = lb.FindForm();
        // Cancel the drag if the mouse moves off the form. The 
        // screenOffset takes into account any desktop bands 
        // that may be at the top or left side of the screen.
        if (Control.get_MousePosition().get_X() - screenOffset.get_X() 
            < f.get_DesktopBounds().get_Left() 
            || Control.get_MousePosition().get_X() 
            - screenOffset.get_X() > f.get_DesktopBounds().get_Right() 
            || Control.get_MousePosition().get_Y() - screenOffset.get_Y() 
            < f.get_DesktopBounds().get_Top() 
            || Control.get_MousePosition().get_Y() - screenOffset.get_Y() 
            > f.get_DesktopBounds().get_Bottom()) {
            e.set_Action(DragAction.Cancel);
        }
    }
} //listDragSource_QueryContinueDrag

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0, 1.1, 1.0
© 2009 Microsoft Corporation. Reservados todos los derechos. Términos de uso  |  Marcas Registradas  |  Privacidad
Page view tracker