次の方法で共有


Control.DragDrop イベント

ドラッグ アンド ドロップ操作が完了したときに発生します。

Public Event DragDrop As DragEventHandler
[C#]
public event DragEventHandler DragDrop;
[C++]
public: __event DragEventHandler* DragDrop;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、DragEventArgs 型の引数を受け取りました。次の DragEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
AllowedEffect ドラッグ イベントの元の場所 (またはソース) で実行できるドラッグ アンド ドロップ操作を取得します。
Data このイベントに関連付けられているデータを含む IDataObject を取得します。
Effect ドラッグ アンド ドロップ操作のターゲットのドロップ効果を取得または設定します。
KeyState マウス ボタンの状態と同様に、Shift、Ctrl、Alt の各キーの現在の状態を取得します。
X マウス ポインタの x 座標 (画面座標) を取得します。
Y マウス ポインタの y 座標 (画面座標) を取得します。

解説

メモ    DragEventArgsX プロパティおよび Y プロパティは、クライアント座標ではなく、画面座標の値です。次の C# のコードでは、これらのプロパティをクライアントの Point に変換します。

Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));

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

使用例

[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++] DragDrop イベントの使用方法を次のコード例に示します。コード例全体については、 DoDragDrop メソッドのトピックを参照してください。

 
Private Sub ListDragTarget_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragDrop
    ' Ensures that the list item index is contained in the data.

    If (e.Data.GetDataPresent(GetType(System.String))) Then

        Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object)

        ' Perform drag and drop, depending upon the effect.
        If (e.Effect = DragDropEffects.Copy Or _
            e.Effect = DragDropEffects.Move) Then

            ' Insert the item.
            If (indexOfItemUnderMouseToDrop <> ListBox.NoMatches) Then
                ListDragTarget.Items.Insert(indexOfItemUnderMouseToDrop, item)
            Else
                ListDragTarget.Items.Add(item)

            End If
        End If
        ' Reset the label text.
        DropLocationLabel.Text = "None"
    End If
End Sub

[C#] 
private void ListDragTarget_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
{
    // Ensure that the list item index is contained in the data.
    if (e.Data.GetDataPresent(typeof(System.String))) {

        Object item = (object)e.Data.GetData(typeof(System.String));

        // Perform drag and drop, depending upon the effect.
        if (e.Effect == DragDropEffects.Copy ||
            e.Effect == DragDropEffects.Move) {
        
            // Insert the item.
            if (indexOfItemUnderMouseToDrop != ListBox.NoMatches)
                ListDragTarget.Items.Insert(indexOfItemUnderMouseToDrop, item);
            else
                ListDragTarget.Items.Add(item);
            
        }
    }
    // Reset the label text.
    DropLocationLabel.Text = "None";
}

[C++] 
private:
   void ListDragTarget_DragDrop(Object* /*sender*/, 
      System::Windows::Forms::DragEventArgs* e) {
         // Ensure that the list item index is contained in the data.
         if (e->Data->GetDataPresent(__typeof(System::String))) {
            Object* item = dynamic_cast<Object*>(
               e->Data->GetData(__typeof(System::String)));

            // Perform drag and drop, depending upon the effect.
            if (e->Effect == DragDropEffects::Copy ||
               e->Effect == DragDropEffects::Move)
            {

               // Insert the item.
               if (indexOfItemUnderMouseToDrop != ListBox::NoMatches)
                  ListDragTarget->Items->Insert(
                  indexOfItemUnderMouseToDrop, item);
               else
                  ListDragTarget->Items->Add(item);

            }
         }
         // Reset the label text.
         DropLocationLabel->Text = S"None";
      }

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

必要条件

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

参照

Control クラス | Control メンバ | System.Windows.Forms 名前空間 | OnDragDrop