共用方式為


Control.GiveFeedback 事件

定義

在拖曳作業期間發生。

public:
 event System::Windows::Forms::GiveFeedbackEventHandler ^ GiveFeedback;
public event System.Windows.Forms.GiveFeedbackEventHandler GiveFeedback;
public event System.Windows.Forms.GiveFeedbackEventHandler? GiveFeedback;
member this.GiveFeedback : System.Windows.Forms.GiveFeedbackEventHandler 
Public Custom Event GiveFeedback As GiveFeedbackEventHandler 

事件類型

範例

下列程式代碼範例示範兩個 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 事件處理程式中取消拖放作業。

此程式代碼摘錄示範如何使用 GiveFeedback 事件。 如需完整的程式代碼範例,請參閱 DoDragDrop 方法。

void ListDragSource_GiveFeedback( Object^ /*sender*/, System::Windows::Forms::GiveFeedbackEventArgs^ e )
{
   // Use custom cursors if the check box is checked.
   if ( UseCustomCursorsCheck->Checked )
   {
      // Sets the custom cursor based upon the effect.
      e->UseDefaultCursors = false;
      if ( (e->Effect & DragDropEffects::Move) == DragDropEffects::Move )
                  ::Cursor::Current = MyNormalCursor;
      else
                  ::Cursor::Current = MyNoDropCursor;
   }
}
private void ListDragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
    // Use custom cursors if the check box is checked.
    if (UseCustomCursorsCheck.Checked)
    {
        // Sets the custom cursor based upon the effect.
        e.UseDefaultCursors = false;
        if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move)
            Cursor.Current = MyNormalCursor;
        else
            Cursor.Current = MyNoDropCursor;
    }
}
Private Sub ListDragSource_GiveFeedback(ByVal sender As Object, ByVal e As GiveFeedbackEventArgs) Handles ListDragSource.GiveFeedback
    ' Use custom cursors if the check box is checked.
    If (UseCustomCursorsCheck.Checked) Then

        ' Set the custom cursor based upon the effect.
        e.UseDefaultCursors = False
        If ((e.Effect And DragDropEffects.Move) = DragDropEffects.Move) Then
            Cursor.Current = MyNormalCursor
        Else
            Cursor.Current = MyNoDropCursor
        End If
    End If

End Sub

備註

啟動拖放作業時,會引發 GiveFeedback 事件。 透過 GiveFeedback 事件,拖曳事件的來源可以修改滑鼠指標的外觀,以便在拖放作業期間提供使用者視覺回饋。

下列說明如何和何時引發與拖放作業相關的事件。

DoDragDrop 方法會決定目前游標位置下的控件。 然後它會檢查控件是否為有效的置放目標。

如果控件是有效的置放目標,則會使用指定的拖放效果引發 GiveFeedback 事件。 如需拖放效果的清單,請參閱 DragDropEffects 列舉。

追蹤滑鼠游標位置、鍵盤狀態和滑鼠按鈕狀態的變更。

  • 如果使用者移出視窗,就會引發 DragLeave 事件。

  • 如果滑鼠進入另一個控件,則會引發該控件的 DragEnter

  • 如果滑鼠移動但停留在相同的控件內,則會引發 DragOver 事件。

如果鍵盤或滑鼠按鈕狀態有所變更,則會引發 QueryContinueDrag 事件,並判斷是要繼續拖曳、卸除數據,還是根據事件 QueryContinueDragEventArgsAction 屬性值取消作業。

  • 如果 DragAction 的值是 Continue,則會引發 DragOver 事件以繼續作業,而且會以新的效果引發 GiveFeedback 事件,以便設定適當的視覺回饋。 如需有效卸除效果的清單,請參閱 DragDropEffects 列舉。

    注意

    DragOverGiveFeedback 事件會配對,如此一來,當滑鼠在置放目標上移動時,使用者就會得到滑鼠位置上最 up-to日期的意見反應。

  • 如果 DragAction 的值是 Drop,則會將下降效果值傳回至來源,讓來源應用程式可以在源數據上執行適當的作業:例如,如果作業是移動,請剪下數據。

  • 如果 DragAction 的值是 Cancel,則會引發 DragLeave 事件。

如需處理事件的詳細資訊,請參閱 處理和引發事件

適用於

另請參閱