ドラッグ アンド ドロップ (Visual Basic 6.0 ユーザー向け)

更新 : 2007 年 11 月

Visual Basic 2008 でドラッグ アンド ドロップ編集を実装するモデルは、Visual Basic 6.0 のモデルと大きく異なります。

概念の違い

Visual Basic 6.0 では、ドラッグ アンド ドロップ編集は 2 種類の方法で実現されています。1 つはフォーム上のコントロール間でドラッグするための標準的なドラッグであり、もう 1 つはフォームとアプリケーションとの間でドラッグするための OLE ドラッグです。

Visual Basic 2008 では、ドラッグ アンド ドロップ編集に単一のモデルが使用されます。このモデルは OLE ドラッグに似ていますが、ドラッグ アンド ドロップのメソッドとイベントに対する名前とパラメータが異なっている上に、イベント モデルも異なります。

ドラッグ アンド ドロップを実行するコードの変更

テキストをドラッグ アンド ドロップするコードの変更

次の例は、TextBox コントロールから別の TextBox コントロールへテキストをドラッグするコードの相違点を示します。

' Visual Basic 6.0
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Text1.Text = "Hello World"
    ' Begin dragging by calling the OLEDrag method.
    Text1.OLEDrag
End Sub

Private Sub Text1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
    ' Only allow copying.
    AllowedEffects = vbDropEffectCopy
    Data.Clear
    ' Populate the Data object with the text to copy and the format.
    Data.SetData Text1.Text, vbCFText
End Sub

Private Sub Text2_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
    ' Make sure that the format is text.
    If Data.GetFormat(vbCFText) Then
      ' If it is text, enable dropping for the second TextBox.
      Text2.OLEDropMode = vbOLEDropManual
    End If
End Sub

Private Sub Text2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
    ' Copy the text from the Data object to the second TextBox.
    Text2.Text = Data.GetData(vbCFText)
End Sub
' Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles MyBase.Load

    ' Dropping must be enabled before the dragging occurs.
    TextBox2.AllowDrop = True
End Sub

Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e _
As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown

    TextBox1.Text = "Hello World"
    ' Begin dragging by calling the DoDragDrop method.
    ' OLEStartDrag is replaced by arguments on the method.
    TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
End Sub

Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e _
As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter

    ' Make sure that the format is text.
    If (e.Data.GetDataPresent(DataFormats.Text)) Then
      ' Allow drop.
      e.Effect = DragDropEffects.Copy
    Else
      ' Do not allow drop.
      e.Effect = DragDropEffects.None
    End If
End Sub

Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e _
As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop

    ' Copy the text to the second TextBox.
    TextBox2.Text = e.Data.GetData(DataFormats.Text).ToString
End Sub

アップグレード メモ

ドラッグ アンド ドロップ コードは、Visual Basic 2008 に自動的にはアップグレードされません。したがって、新しいモデルを使用したコードに書き換える必要があります。アップグレードの過程で、すべてのドラッグ アンド ドロップ コードには警告が挿入されます。

参照

その他の技術情報

ドラッグ アンド ドロップ操作とクリップボードのサポート