拖放滑鼠行為概觀 (Windows Forms .NET)

Windows Form 包含一組實作拖放行為的方法、事件和類別。 本主題提供 Windows Forms 中拖放支援的概觀。

重要

.NET 7 和 .NET 6 的桌面指南檔正在建置中。

拖放事件

拖放作業包含兩類事件:拖放作業的目前目標所發生的事件,以及拖放作業的來源所發生的事件。 若要執行拖放作業,您必須處理這些事件。 使用這些事件的事件引數中所提供的資訊,即可輕鬆地運用拖放作業。

目前置放目標上的事件

下表顯示拖放作業的目前目標所發生的事件。

滑鼠事件 描述
DragEnter 這個事件會在將物件拖曳至控制項的界限內時發生。 這個事件的處理常式會接收 DragEventArgs 類型的引數。
DragOver 這個事件會在滑鼠指標位於控制項界限內的情況下拖曳物件時發生。 這個事件的處理常式會接收 DragEventArgs 類型的引數。
DragDrop 這個事件會在拖放作業完成時發生。 這個事件的處理常式會接收 DragEventArgs 類型的引數。
DragLeave 這個事件會在將物件拖曳出控制項的界限時發生。 這個事件的處理常式會接收 EventArgs 類型的引數。

DragEventArgs 類別提供滑鼠指標的位置、滑鼠按鈕和鍵盤輔助按鍵的目前狀態、正在拖曳的資料,以及可指定拖曳事件來源所允許的作業和作業的目標置放效果的 DragDropEffects 值。

置放來源上的事件

下表顯示拖放作業的來源所發生的事件。

滑鼠事件 描述
GiveFeedback 這個事件會在拖曳作業期間發生。 它提供了一個可對正在發生拖放作業的使用者顯示視覺提示的機會,例如變更滑鼠指標。 這個事件的處理常式會接收 GiveFeedbackEventArgs 類型的引數。
QueryContinueDrag 這個事件會在拖放作業期間引發,讓拖曳來源能夠決定是否應取消拖放作業。 這個事件的處理常式會接收 QueryContinueDragEventArgs 類型的引數。

QueryContinueDragEventArgs 類別提供滑鼠按鈕和鍵盤輔助按鍵的目前狀態、指定是否已按下 ESC 鍵的值,以及可設定以指定是否應該繼續拖放作業的 DragAction 值。

執行拖放

拖放作業一律牽涉到兩個元件: 拖放來源 置放目標 。 若要啟動拖放作業,請將控制項指定為來源並處理 MouseDown 事件。 在事件處理常式中,呼叫 DoDragDrop 方法,提供與卸載和 DragDropEffects 值相關聯的資料。

將目標控制項的 AllowDrop 屬性設定為 true ,以允許該控制項接受拖放作業。 目標會處理兩個事件,第一個事件是回應控制項上拖曳的事件,例如 DragOver 。 第二個事件,也就是卸載動作本身。 DragDrop

下列範例示範從 Label 控制項拖曳至 TextBox 。 拖曳完成時,會將 TextBox 標籤的文字指派給本身來回應。

// Initiate the drag
private void label1_MouseDown(object sender, MouseEventArgs e) =>
    DoDragDrop(((Label)sender).Text, DragDropEffects.All);

// Set the effect filter and allow the drop on this control
private void textBox1_DragOver(object sender, DragEventArgs e) =>
    e.Effect = DragDropEffects.All;

// React to the drop on this control
private void textBox1_DragDrop(object sender, DragEventArgs e) =>
    textBox1.Text = (string)e.Data.GetData(typeof(string));
' Initiate the drag
Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs)
    DoDragDrop(DirectCast(sender, Label).Text, DragDropEffects.All)
End Sub

' Set the effect filter and allow the drop on this control
Private Sub TextBox1_DragOver(sender As Object, e As DragEventArgs)
    e.Effect = DragDropEffects.All
End Sub

' React to the drop on this control
Private Sub TextBox1_DragDrop(sender As Object, e As DragEventArgs)
    TextBox1.Text = e.Data.GetData(GetType(String))
End Sub

如需有關拖曳效果的詳細資訊,請參閱 DataAllowedEffect

另請參閱