Windows ベースのアプリケーション内でドラッグ アンド ドロップ操作を実行するには、一連のイベント (特に DragEnter、DragLeave、および DragDrop イベント) を処理する必要があります。 これらのイベントのイベント引数で使用できる情報を操作することで、ドラッグ アンド ドロップ操作を簡単に行うことができます。
データのドラッグ
すべてのドラッグ アンド ドロップ操作は、ドラッグから始まります。 ドラッグの開始時にデータを収集できるようにする機能は、DoDragDrop メソッドに実装されています。
次の例では、MouseDown イベントは最も直感的であるため、ドラッグ操作を開始するために使用されます (ドラッグ アンド ドロップ操作の多くは、マウス ボタンが押された状態から始まります)。 ただし、任意のイベントを使用してドラッグ アンド ドロップ プロシージャを開始できることに注意してください。
ドラッグ操作を開始するには
ドラッグが開始されるコントロールの MouseDown イベントで、
DoDragDrop
メソッドを使用して、ドラッグするデータを設定し、ドラッグできる効果を設定します。 詳細については、「Data と AllowedEffect」を参照してください。次の例は、ドラッグ操作を開始する方法を示しています。 ドラッグが開始されるコントロールは Button コントロール、ドラッグされるデータは Text コントロールの Button プロパティを表す文字列であり、許可される効果はコピーまたは移動のいずれかです。
Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown Button1.DoDragDrop(Button1.Text, DragDropEffects.Copy Or DragDropEffects.Move) End Sub
private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { button1.DoDragDrop(button1.Text, DragDropEffects.Copy | DragDropEffects.Move); }
ドラッグ操作が有効な間は、QueryContinueDrag イベントを処理できます。このイベントは、システムの "アクセス許可を要求" してドラッグ操作を続行します。 このメソッドを処理する場合は、ドラッグ操作に影響を与えるメソッドを呼び出すのも適切なポイントです。たとえば、カーソルをポイントしたときに TreeNode コントロール内の TreeView を展開する場合などです。
データのドロップ
Windows フォームまたはコントロール上の場所からデータをドラッグし始めたら、自然とどこかにドロップします。 カーソルは、データをドロップするように正しく構成されているフォームまたはコントロールの領域を越えると変更されます。 AllowDrop プロパティを設定し、DragEnter イベントと DragDrop イベントを処理することで、Windows フォームまたはコントロール内の任意の領域で削除されたデータを受け入れることもできます。
ドロップを実行するには
AllowDrop プロパティを true に設定します。
ドロップが発生するコントロールの
DragEnter
イベントで、ドラッグするデータが許容される型 (この場合は Text) であることを確認します。 次に、ドロップが発生したときに発生する効果を、DragDropEffects 列挙型の値に設定します。 詳細については、Effectを参照してください。Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub
private void textBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }
注
DataFormats メソッドの Object パラメーターとして独自のオブジェクトを指定することで、独自の SetData を定義できます。 これを行うときは、指定されたオブジェクトがシリアル化可能であることを確認してください。 詳細については、ISerializableを参照してください。
ドロップが発生するコントロールの DragDrop イベントで、GetData メソッドを使用して、ドラッグされるデータを取得します。 詳細については、Dataを参照してください。
次の例では、TextBox コントロールがドラッグ先の (ドロップが発生する) コントロールです。 このコードは、Text コントロールの TextBox プロパティを、ドラッグするデータと等しく設定します。
Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = e.Data.GetData(DataFormats.Text).ToString End Sub
private void textBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { textBox1.Text = e.Data.GetData(DataFormats.Text).ToString(); }
注
さらに、KeyState プロパティを使用して、ドラッグ アンド ドロップ操作中に押されたキーに応じて、特定の効果が発生するようにすることができます (たとえば、Ctrl キーを押したときにドラッグされたデータをコピーするのが標準です)。
こちらも参照ください
- 方法: クリップボードの にデータを追加する
- 方法: クリップボード からデータを取得する
- ドラッグ アンド ドロップ操作とクリップボードのサポート
.NET Desktop feedback