DragAction 枚举

定义

指定拖放操作应如何继续以及是否应继续。Specifies how and if a drag-and-drop operation should continue.

public enum class DragAction
[System.Runtime.InteropServices.ComVisible(true)]
public enum DragAction
type DragAction = 
Public Enum DragAction
继承
DragAction
属性

字段

Cancel 2

操作被取消,没有放置消息。The operation is canceled with no drop message.

Continue 0

该操作将继续。The operation will continue.

Drop 1

该操作以放置而告终。The operation will stop with a drop.

示例

下面的示例演示两个 ListBox 控件之间的拖放操作。The following example demonstrates a drag-and-drop operation between two ListBox controls. 该示例在拖动操作开始时调用 DoDragDrop 方法。The example calls the DoDragDrop method when the drag action starts. 如果鼠标在 MouseDown 事件期间从鼠标位置移动了超出 SystemInformation.DragSize,则拖动操作将启动。The drag action starts if the mouse has moved more than SystemInformation.DragSize from the mouse location during the MouseDown event. IndexFromPoint 方法用于确定 MouseDown 事件期间要拖动的项的索引。The IndexFromPoint method is used to determine the index of the item to drag during the MouseDown event.

该示例还演示了如何对拖放操作使用自定义光标。The example also demonstrates using custom cursors for the drag-and-drop operation. 该示例假定应用程序目录中有两个 cursor 文件(3dwarro.cur3dwno.cur,分别用于自定义的拖放和无删除光标。The example assumes that two cursor files, 3dwarro.cur and 3dwno.cur, exist in the application directory, for the custom drag and no-drop cursors, respectively. 如果选中 UseCustomCursorsCheckCheckBox,则将使用自定义光标。The custom cursors will be used if the UseCustomCursorsCheckCheckBox is checked. 自定义游标是在 GiveFeedback 事件处理程序中设置的。The custom cursors are set in the GiveFeedback event handler.

键盘状态在右侧 ListBoxDragOver 事件处理程序中进行计算,以根据 SHIFT、CTRL、ALT 或 CTRL + ALT 键的状态确定拖动操作的状态。The keyboard state is evaluated in the DragOver event handler for the right ListBox, to determine what the drag operation will be based upon state of the SHIFT, CTRL, ALT, or CTRL+ALT keys. DragOver 事件期间,也确定了放置的 ListBox 位置。The location in the ListBox where the drop would occur is also determined during the DragOver event. 如果要删除的数据不是 String,则将 DragEventArgs.Effect 设置为 "DragDropEffects.None"。If the data to drop is not a String, then the DragEventArgs.Effect is set to DragDropEffects.None. 最后,drop 的状态显示在 DropLocationLabelLabel中。Finally, the status of the drop is displayed in the DropLocationLabelLabel.

向右 ListBox 放置的数据是在 DragDrop 事件处理程序中确定的,String 值将添加到 ListBox中的适当位置。The data to drop for the right ListBox is determined in the DragDrop event handler and the String value is added at the appropriate place in the ListBox. 如果拖动操作移到窗体的边界之外,则会在 QueryContinueDrag 事件处理程序中取消拖放操作。If the drag operation moves outside the bounds of the form, then the drag-and-drop operation is canceled in the QueryContinueDrag event handler.

此代码摘录演示了如何使用 DragAction 枚举。This code excerpt demonstrates using the DragAction enumeration. 有关完整的代码示例,请参阅 DoDragDrop 方法。See the DoDragDrop method for the complete code example.

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;
      }
   }
}
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;
        }
    }
}
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

注解

此枚举由 QueryContinueDragEventArgs使用。This enumeration is used by QueryContinueDragEventArgs.

适用于