Evaluar y enviar comentarios
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2008/.NET Framework 3.5

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
DragAction (Enumeración)

Actualización: noviembre 2007

Especifica si debe continuar una operación de arrastrar y colocar y de qué forma.

Espacio de nombres:  System.Windows.Forms
Ensamblado:  System.Windows.Forms (en System.Windows.Forms.dll)
Visual Basic (Declaración)
<ComVisibleAttribute(True)> _
Public Enumeration DragAction
Visual Basic (Uso)
Dim instance As DragAction
C#
[ComVisibleAttribute(true)]
public enum DragAction
Visual C++
[ComVisibleAttribute(true)]
public enum class DragAction
J#
/** @attribute ComVisibleAttribute(true) */
public enum DragAction
JScript
public enum DragAction
Nombre de miembroDescripción
ContinueLa operación continuará.
DropLa operación se detendrá con una operación de colocar.
CancelLa operación se cancela sin mensaje relacionado con la operación de colocar.

QueryContinueDragEventArgs utiliza esta enumeración.

En el siguiente ejemplo 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 forma de utilizar cursores personalizados para la operación de arrastrar y colocar. En este ejemplo, se supone que hay dos archivos de cursor (3dwarro.cur y 3dwno.cur) en el directorio de la aplicación para los cursores de arrastrar y colocar personalizados, 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 eventos DragOver en el ListBox de la derecha para determinar la operación de arrastrar en función del estado de las teclas MAYÚS, CTRL, ALT o CTRL+ALT. La ubicación de ListBox donde se produciría 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, entonces DragEventArgs..::.Effect se establece en DragDropEffects..::.None. Por último, el estado de la operación de colocar se muestra en DropLocationLabelLabel.

Los datos que se van a colocar en el ListBox de la derecha 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 la enumeración DragAction. 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;
        }
    }
}
Visual 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 Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2012 Microsoft. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker