次の方法で共有


DragEventHandler デリゲート

ControlDragDropDragEnter 、または DragOver の各イベントを処理するメソッドを表します。

<Serializable>
Public Delegate Sub DragEventHandler( _   ByVal sender As Object, _   ByVal e As DragEventArgs _)
[C#]
[Serializable]
public delegate void DragEventHandler(   object sender,   DragEventArgs e);
[C++]
[Serializable]
public __gc __delegate void DragEventHandler(   Object* sender,   DragEventArgs* e);

[JScript] JScript では、.NET Framework のデリゲートを利用することができます。ただし、独自に定義することはできません。

パラメータ [Visual Basic, C#, C++]

作成するイベント ハンドラは、DragEventHandler クラスのデリゲート定義と同一のパラメータを持つ必要があります。

  • sender
    イベントのソース。
  • e
    イベント データを格納している DragEventArgs

解説

DragEventHandler デリゲートを作成する場合は、イベントを処理するメソッドを識別します。イベントをイベント ハンドラに関連付けるには、デリゲートのインスタンスをイベントに追加します。デリゲートを削除しない限り、そのイベントが発生すると常にイベント ハンドラが呼び出されます。デリゲートを使用したイベント処理の詳細については、「 イベントとデリゲート 」を参照してください。

使用例

[Visual Basic, C#, C++] 2 つの ListBox コントロールの間でドラッグ アンド ドロップ操作を実行する例を次に示します。この例では、ドラッグ アクションが開始したときに DoDragDrop メソッドが呼び出されます。ドラッグ操作は、 MouseDown イベント実行中のマウス位置から SystemInformation.DragSize を超えてマウスが移動したときに開始されます。 IndexFromPoint メソッドは、 MouseDown イベントで、ドラッグする項目のインデックスを判別するために使用します。

[Visual Basic, C#, C++] この例では、ドラッグ アンド ドロップ操作でカスタム カーソルを使用する方法についても示します。この例では、2 つのカーソル ファイル (3dwarro.cur3dwno.cur) がアプリケーション ディレクトリ内に存在していることを想定しています。なお、それぞれのファイルはドラッグ用のカスタム カーソルとドロップなしのカスタム カーソルを表します。カスタム カーソルは、 UseCustomCursorsCheck CheckBox がオンになっている場合に使用されます。カスタム カーソルは、 GiveFeedback イベント ハンドラで設定されます。

[Visual Basic, C#, C++] キーボードの状態は、右側の ListBoxDragOver イベント ハンドラで評価されます。ドラッグ操作の内容は、Shift キー、Ctrl キー、Alt キー、または Ctrl + Alt キーの状態によって決まります。ドロップが発生する ListBox 内の位置は、 DragOver イベント時にも判定されます。ドロップするデータが String でない場合は、 DragEventArgs.EffectDragDropEffects.None に設定されます。最後に、ドロップのステータスが DropLocationLabel Label に表示されます。

[Visual Basic, C#, C++] 右側の ListBox にドロップするデータは、 DragDrop イベント ハンドラで判定されます。また、 String 値が ListBox の該当する場所に追加されます。ドラッグ操作がフォームの範囲を超えて移動した場合、ドラッグ アンド ドロップ操作は QueryContinueDrag イベント ハンドラでキャンセルされます。

[Visual Basic, C#, C++] DragOver イベントで DragEventHandler デリゲートを使用する例を次に示します。コード例全体については、 DoDragDrop メソッドのトピックを参照してください。

 
Private Sub ListDragTarget_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragOver
    ' Determine whether string data exists in the drop data. If not, then
    ' the drop effect reflects that the drop cannot occur.
    If Not (e.Data.GetDataPresent(GetType(System.String))) Then

        e.Effect = DragDropEffects.None
        DropLocationLabel.Text = "None - no string data."
        Return
    End If

    ' Set the effect based upon the KeyState.
    If ((e.KeyState And (8 + 32)) = (8 + 32) And _
        (e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then
        ' KeyState 8 + 32 = CTL + ALT

        ' Link drag and drop effect.
        e.Effect = DragDropEffects.Link

    ElseIf ((e.KeyState And 32) = 32 And _
        (e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then

        ' ALT KeyState for link.
        e.Effect = DragDropEffects.Link

    ElseIf ((e.KeyState And 4) = 4 And _
        (e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then

        ' SHIFT KeyState for move.
        e.Effect = DragDropEffects.Move

    ElseIf ((e.KeyState And 8) = 8 And _
        (e.AllowedEffect And DragDropEffects.Copy) = DragDropEffects.Copy) Then

        ' CTL KeyState for copy.
        e.Effect = DragDropEffects.Copy

    ElseIf ((e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then

        ' By default, the drop action should be move, if allowed.
        e.Effect = DragDropEffects.Move

    Else
        e.Effect = DragDropEffects.None
    End If

    ' Gets the index of the item the mouse is below. 

    ' The mouse locations are relative to the screen, so they must be 
    ' converted to client coordinates.

    indexOfItemUnderMouseToDrop = _
        ListDragTarget.IndexFromPoint(ListDragTarget.PointToClient(New Point(e.X, e.Y)))

    ' Updates the label text.
    If (indexOfItemUnderMouseToDrop <> ListBox.NoMatches) Then

        DropLocationLabel.Text = "Drops before item #" & (indexOfItemUnderMouseToDrop + 1)
    Else
        DropLocationLabel.Text = "Drops at the end."
    End If

End Sub

[C#] 
private void ListDragTarget_DragOver(object sender, System.Windows.Forms.DragEventArgs e) 
{

    // Determine whether string data exists in the drop data. If not, then
    // the drop effect reflects that the drop cannot occur.
    if (!e.Data.GetDataPresent(typeof(System.String))) {

        e.Effect = DragDropEffects.None;
        DropLocationLabel.Text = "None - no string data.";
        return;
    }

    // Set the effect based upon the KeyState.
    if ((e.KeyState & (8+32)) == (8+32) && 
        (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) {
        // KeyState 8 + 32 = CTL + ALT

        // Link drag and drop effect.
        e.Effect = DragDropEffects.Link;

    } else if ((e.KeyState & 32) == 32 && 
        (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) {

        // ALT KeyState for link.
        e.Effect = DragDropEffects.Link;

    } else if ((e.KeyState & 4) == 4 && 
        (e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) {

        // SHIFT KeyState for move.
        e.Effect = DragDropEffects.Move;

    } else if ((e.KeyState & 8) == 8 && 
        (e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) {

        // CTL KeyState for copy.
        e.Effect = DragDropEffects.Copy;

    } else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)  {

        // By default, the drop action should be move, if allowed.
        e.Effect = DragDropEffects.Move;

    } else
        e.Effect = DragDropEffects.None;
        
    // Get the index of the item the mouse is below. 

    // The mouse locations are relative to the screen, so they must be 
    // converted to client coordinates.

    indexOfItemUnderMouseToDrop = 
        ListDragTarget.IndexFromPoint(ListDragTarget.PointToClient(new Point(e.X, e.Y)));

    // Updates the label text.
    if (indexOfItemUnderMouseToDrop != ListBox.NoMatches){

        DropLocationLabel.Text = "Drops before item #" + (indexOfItemUnderMouseToDrop + 1);
    } else
        DropLocationLabel.Text = "Drops at the end.";

}

[C++] 
private:
   void ListDragTarget_DragOver(Object* /*sender*/, 
      System::Windows::Forms::DragEventArgs* e)
   {

      // Determine whether string data exists in the drop data. If not, then
      // the drop effect reflects that the drop cannot occur.
      if (!e->Data->GetDataPresent(__typeof(System::String))) {

         e->Effect = DragDropEffects::None;
         DropLocationLabel->Text = S"None - no string data.";
         return;
      }

      // Set the effect based upon the KeyState.
      if ((e->KeyState & (8+32)) == (8+32) &&
         (e->AllowedEffect & DragDropEffects::Link) == DragDropEffects::Link) 
      {
         // KeyState 8 + 32 = CTL + ALT

         // Link drag and drop effect.
         e->Effect = DragDropEffects::Link;

      } else if ((e->KeyState & 32) == 32 &&
         (e->AllowedEffect & DragDropEffects::Link) == DragDropEffects::Link)
      {

         // ALT KeyState for link.
         e->Effect = DragDropEffects::Link;

      } else if ((e->KeyState & 4) == 4 &&
         (e->AllowedEffect & DragDropEffects::Move) == DragDropEffects::Move)
      {
         // SHIFT KeyState for move.
         e->Effect = DragDropEffects::Move;

      } else if ((e->KeyState & 8) == 8 &&
         (e->AllowedEffect & DragDropEffects::Copy) == DragDropEffects::Copy)
      {
         // CTL KeyState for copy.
         e->Effect = DragDropEffects::Copy;

      } else if ((e->AllowedEffect & DragDropEffects::Move) == DragDropEffects::Move)
      {
         // By default, the drop action should be move, if allowed.
         e->Effect = DragDropEffects::Move;

      } else
         e->Effect = DragDropEffects::None;

      // Get the index of the item the mouse is below.

      // The mouse locations are relative to the screen, so they must be
      // converted to client coordinates.

      indexOfItemUnderMouseToDrop =
         ListDragTarget->IndexFromPoint(
         ListDragTarget->PointToClient(Point(e->X, e->Y)));

      // Updates the label text.
      if (indexOfItemUnderMouseToDrop != ListBox::NoMatches) {

         DropLocationLabel->Text = 
            String::Concat(S"Drops before item # ",
            __box( (indexOfItemUnderMouseToDrop + 1)));
      } else
         DropLocationLabel->Text = S"Drops at the end.";

   }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Windows.Forms

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Windows.Forms (System.Windows.Forms.dll 内)

参照

System.Windows.Forms 名前空間 | OnDragDrop | DragDrop | OnDragEnter | DragEnter | OnDragOver | DragOver | DragEventArgs