DragAction 列舉

定義

指定拖放作業是否應該繼續以及如何繼續。

public enum class DragAction
[System.Runtime.InteropServices.ComVisible(true)]
public enum DragAction
public enum DragAction
[<System.Runtime.InteropServices.ComVisible(true)>]
type DragAction = 
type DragAction = 
Public Enum DragAction
繼承
DragAction
屬性

欄位

Cancel 2

取消無卸除訊息的作業。

Continue 0

作業將會繼續。

Drop 1

作業會因為卸除而停止。

範例

下列範例示範兩 ListBox 個控制項之間的拖放作業。 範例會在拖曳動作啟動時呼叫 DoDragDrop 方法。 如果滑鼠在事件期間 MouseDown 從滑鼠位置移動超過 SystemInformation.DragSize ,拖曳動作就會開始。 方法 IndexFromPoint 可用來判斷事件期間 MouseDown 要拖曳之專案的索引。

此範例也會示範如何針對拖放作業使用自訂資料指標。 此範例假設應用程式目錄中分別存在自訂拖放資料指標的兩個數據指標檔案 3dwarro.cur3dwno.cur 。 如果已核取 , UseCustomCursorsCheckCheckBox 則會使用自訂資料指標。 自訂資料指標是在事件處理常式中 GiveFeedback 設定。

鍵盤狀態會在右側 ListBoxDragOver 事件處理常式中評估,以判斷拖曳作業會根據 SHIFT、CTRL、ALT 或 CTRL+ALT 鍵的狀態而定。 在 事件期間 DragOver 也會決定置放位置中的位置 ListBox 。 如果要卸載的資料不是 String ,則會 DragEventArgs.Effect 將 設定為 DragDropEffects.None 。 最後,卸載的狀態會顯示在 中 DropLocationLabelLabel

要為右邊 ListBox 卸載的資料是在事件處理常式中 DragDrop 決定, String 而且值會加入至 中 ListBox 適當的位置。 如果拖曳作業在表單界限之外移動,則會在事件處理常式中 QueryContinueDrag 取消拖放作業。

此程式碼摘錄示範如何使用 DragAction 列舉。 如需完整的程式碼範例, DoDragDrop 請參閱 方法。

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, 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, 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 使用。

適用於