ヘッダー

VB.NET2002対応 VB.NET2003対応 VB2005対応

 

Visual Basic 中学校 > VB.NET サンプル > Windows.Forms.ListBox >

ドラッグ&ドロップした位置に項目を追加する

以下の例では単にドラッグ&ドロップで項目を追加するだけではなく、ドロップされた位置に項目を挿入する。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    'ドロップを受け入れるようにする
   
ListBox1.AllowDrop = True

End Sub

Private Sub ListBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragEnter

    If e.Data.GetDataPresent(GetType(String)) Then
        'ドラッグされている内容が文字列に変換可能な場合は
        '受け入れ可能であることをドラッグ元に通知する。
       
e.Effect = DragDropEffects.Copy
    End
If

End Sub

Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop

    'ドロップされた場所のインデックスを取得する。
   
Dim Index As Integer = GetIndexFromFormPoint(e.X, e.Y)

    If Index = -1 Then
       
'ドロップされた場所に項目がなければ、末尾に項目を追加する。
       
ListBox1.Items.Add(e.Data.GetData(GetType(String)))
   
Else
       
'ドロップされた場所に項目があれば、その項目の位置に項目を挿入する。
       
ListBox1.Items.Insert(Index, e.Data.GetData(GetType(String)))
    End
If

End Sub

'■GetIndexFromFormPoint
'■機能:ドロップされた位置にある項目のインデックスを取得する。
'■戻り値:ドロップされた場所に項目がない場合 -1
Private Function GetIndexFromFormPoint(ByVal X As Integer, ByVal Y As Integer) As Integer

    Dim p As Point = ListBox1.PointToClient(New Point(X, Y))

    Return ListBox1.IndexFromPoint(p.X, p.Y)

End Function