Implementasi drag and drop pada listbox Visual Basic .Net

alfa6661
- December 03, 2011
0 (0 votes)
Rate :
Bagaimana cara mengimplementasikan drag and drop pada listbox menggunakan Visual Basic. NET

Pengguna Windows jatuh ke dalam dua kategori umum: mereka yang lebih memilih untuk menggunakan keyboard dan mereka yang lebih memilih untuk menggunakan mouse. Programmer telah diajarkan untuk menjaga kebutuhan pengguna Keyboard dengan menyediakan shortcut, tetapi kebutuhan pengguna mouse sebagian besar telah diabaikan. Programmer cenderung menjadi pengguna keyboard, sehingga penekanan pada fitur keyboard lebih di utamakan.

Satu hal yang pengguna mouse harapkan adalah kemampuan untuk drag dan drop pada aplikasi yang digunakan. Jika kita melihat sebagian besar aplikasi utama di Windows, drag dan drop ada di mana-mana. Sebagai contoh, pengguna yang terbiasa drag dan drop file di Windows Explorer. Drag dan drop pada dasarnya sama seperti copy dan paste menggunakan mouse daripada keyboard.

Syntax

Skenario sederhana dapat kita implementasikan pada sebuah listbox. dimana kita akan mengubah urutan dari item listbox dengan menggunakan drag and drop.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ListBox1.AllowDrop = True
    ListBox2.AllowDrop = True
End Sub
Private Sub listbox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown, ListBox2.MouseDown
 
Dim lst As ListBox = DirectCast(sender, ListBox)
 
If e.Button = Windows.Forms.MouseButtons.Left Then
    Dim index As Integer = lst.IndexFromPoint(e.X, e.Y)
    If index <> ListBox.NoMatches Then
        Dim item As String = lst.Items(index)
        Dim drop_effect As DragDropEffects = lst.DoDragDrop(lst.Items(index), DragDropEffects.Move Or DragDropEffects.Copy)
 
        If drop_effect = DragDropEffects.Move Then
            If lst.Items(index) = item Then
                lst.Items.RemoveAt(index)
            Else
                lst.Items.RemoveAt(index + 1)
            End If
        End If
    End If
End If
 
End Sub
Private Sub listbox1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragOver, ListBox2.DragOver
 
    If Not (e.Data.GetDataPresent(GetType(System.String))) Then
        e.Effect = DragDropEffects.None
    ElseIf (e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move Then
        e.Effect = DragDropEffects.Move
    End If
 
End Sub
Private Sub listbox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop, ListBox2.DragDrop
 
If e.Data.GetDataPresent(GetType(System.String)) Then
    If (e.Effect = DragDropEffects.Copy) Or (e.Effect = DragDropEffects.Move) Then
        Dim lst As ListBox = DirectCast(sender, ListBox)
        Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object)
        Dim pt As Point = lst.PointToClient(New Point(e.X, e.Y))
        Dim index As Integer = lst.IndexFromPoint(pt.X, pt.Y)
        If index = ListBox.NoMatches Then
            lst.Items.Add(item)
        Else
            lst.Items.Insert(index, item)
        End If
    End If
End If
 
End Sub

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter

– Eric S. Raymond

Have a better explanation?

If you have comments about this post. Please write your comments below

No comments associated with this article