次の方法で共有


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 

イベントの種類

次のコード例は、2 つの ListBox コントロール間のドラッグ アンド ドロップ操作を示しています。 この例では、ドラッグ アクションの開始時に DoDragDrop メソッドを呼び出します。 ドラッグ 操作は、MouseDown イベント中にマウスの位置からマウスが SystemInformation.DragSize 以上移動した場合に開始されます。 IndexFromPoint メソッドは、MouseDown イベント中にドラッグする項目のインデックスを決定するために使用されます。

この例では、ドラッグ アンド ドロップ操作にカスタム カーソルを使用する方法も示します。 この例では、カスタム ドラッグ カーソルとドロップなしのカーソルに対して、それぞれ 2 つのカーソル ファイル (3dwarro.cur3dwno.cur) がアプリケーション ディレクトリに存在している必要があります。 UseCustomCursorsCheck CheckBox がチェックされている場合は、カスタム カーソルが使用されます。 カスタム カーソルは、GiveFeedback イベント ハンドラーで設定されます。

キーボードの状態は、右 ListBoxDragOver イベント ハンドラーで評価され、Shift キー、Ctrl キー、Alt キー、または Ctrl + Alt キーの状態に基づいてドラッグ操作を決定します。 ドロップが発生する ListBox 内の場所も、DragOver イベント中に決定されます。 削除するデータが Stringでない場合、DragEventArgs.EffectDragDropEffectsNone に設定されます。 最後に、ドロップの状態が 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 列挙型を参照してください。

    手記

    DragOver イベントと GiveFeedback イベントはペアになっているため、マウスがドロップ ターゲットを越えて移動すると、ユーザーはマウスの位置に対して最も up-to-date フィードバックを受け取ります。

  • DragAction の値が Drop場合、ドロップ効果の値がソースに返されるため、ソース アプリケーションはソース データに対して適切な操作を実行できます。たとえば、操作が移動の場合はデータを切り取ります。

  • DragAction の値が Cancel場合、DragLeave イベントが発生します。

イベントの処理の詳細については、「イベントの処理と発生」を参照してください。

適用対象

こちらもご覧ください