テキストのドラッグ&ドロップ
以降では、ドラッグ&ドロップを実装するサンプルアプリケーションを実際に作成してみます。Visual Studio 2005でWindowsフォームアプリケーションを新規作成し、「DragAndDrop」という名前を付けます。ドラッグ&ドロップ処理のコーディングは、使用するコントロールやデータタイプによって若干異なります。この節では、テキストをTextBoxコントロールにドラッグ&ドロップする方法を紹介します。
デフォルトのForm1にTextBoxコントロールを配置し(図2を参照)、TextBoxコントロールの次の2つのプロパティを設定します。
| プロパティ名 | 設定値 |
| Multiline | True |
| BorderStyle | Fixed3D |

Form1のコードビューに切り替えて、次の定数を宣言します。
Public Class Form1 Const CtrlMask As Byte = 8
Form1_Loadイベントで、TextBoxのAllowDropプロパティをTrueに設定します。
Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load '---set the control to allow drop--- TextBox1.AllowDrop = True End Sub
次に、DragEnterイベントのコードを記述します。前述したように、コントロールに何かをドラッグすると、このイベントが発生します。ここで、このドラッグ操作がコピーなのか移動なのかをCtrlキーの押下状態に基づいて判断し、その結果に応じてマウスポインタを設定します。この特殊なキーストロークをチェックするには、KeyStateプロパティとCtrlMask(1バイトのマスク定数、値は8)をAND演算します。さらに、ユーザーのための視覚的なヒントとなるように、TextBoxコントロールの境界線のスタイルをFixedSingleに変更します。コードは次のとおりです。
Private Sub TextBox1_DragEnter( _ ByVal sender As Object, _ ByVal e As _ System.Windows.Forms.DragEventArgs) _ Handles TextBox1.DragEnter '---if the data to be dropped is a text format--- If (e.Data.GetDataPresent(DataFormats.Text)) Then '---determine if this is a copy or move--- If (e.KeyState And CtrlMask) = CtrlMask Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.Move End If '---change the border style of the control--- TextBox1.BorderStyle = BorderStyle.FixedSingle End If End Sub
ドラッグしたテキストがドロップされたときの処理は、DragDropイベントに記述します。コードは次のとおりです。
Private Sub TextBox1_DragDrop( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles TextBox1.DragDrop '---if the data to be dropped is a text format--- If (e.Data.GetDataPresent(DataFormats.Text)) Then '---set the control to display ' the text being dropped--- TextBox1.Text = e.Data.GetData( _ DataFormats.Text) End If '---set the borderstyle back to its original--- TextBox1.BorderStyle = BorderStyle.Fixed3D End Sub
この時点で、F5キーを押してアプリケーションをテストできます。図3は、ユーザーがTextBoxコントロール上で移動またはコピーの操作を行う際のマウスポインタを示しています。コピー操作を行うには、マウスをドラッグする際にCtrlキーを押したままにするだけです。図4は、ドロップを受け入れない領域にオブジェクトをドラッグした場合のポインタを示しています(図の下側)。


テキストをドラッグ&ドロップする方法を覚えたところで、次はPictureBoxコントロール間で画像をドラッグ&ドロップする方法を見ていきましょう。
