共用方式為


QueryContinueDragEventHandler 代理人

定義

表示將處理 ControlQueryContinueDrag 事件的方法。

public delegate void QueryContinueDragEventHandler(System::Object ^ sender, QueryContinueDragEventArgs ^ e);
public delegate void QueryContinueDragEventHandler(object sender, QueryContinueDragEventArgs e);
public delegate void QueryContinueDragEventHandler(object? sender, QueryContinueDragEventArgs e);
type QueryContinueDragEventHandler = delegate of obj * QueryContinueDragEventArgs -> unit
Public Delegate Sub QueryContinueDragEventHandler(sender As Object, e As QueryContinueDragEventArgs)

參數

sender
Object

事件的來源。

範例

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

此程式代碼摘錄示範如何搭配 QueryContinueDrag 事件使用 QueryContinueDragEventHandler 委派。 如需完整的程式代碼範例,請參閱 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

備註

當您建立 QueryContinueDragEventHandler 委派時,您可以識別將處理事件的方法。 若要將事件與您的事件處理程式產生關聯,請將委派的實例新增至 事件。 除非移除委派,否則每當事件發生時,就會呼叫事件處理程式。 如需使用委派處理事件的詳細資訊,請參閱 處理和引發事件

擴充方法

GetMethodInfo(Delegate)

取得 物件,表示指定委派所表示的方法。

適用於

另請參閱