Cara Drag Drop Multi Subitems Pada Listview Dengan Vb6

5 views
Fungsi komponen Listiview pada Microsoft Visual Basic 6.0 (VB6) untuk views atau menampilkan data yang terdiri dari baris dan kolom, source code cara memindahkan baris pada tabel Listiview dengan memakai Mouse atau lebih kita kenal dengan istilah Drag Drop pada artikel sebelumnya mengenai pembahasan drag drop pernah admin bahas pada judul artikel Contoh Membuat Drag dan Drop File ke ListBox akan tetapi memakai componen ListBox, secara garis besar cara kerja dari syntak ini hampir sama hanya saja sedikit berbeda dengan komponen yang dipakai dan metode drag drop nya.


Untuk pertama kalinya buka Microsoft Visual Basic 6.0 – StandartEXE dilanjutkan buat sebuah form dan tambahkan satu buah module sebagai daerah pendeklarasian variabel-variabel pendukung dari sourcode ini. Tambahkan komponen Listiview Control (Microsoft Windows Common Control 6.0 (SP6) lalu tambahkan ke form. Kemudian copykan syntak berikut ini kedalam sebuah module 

Public Sub LVDragDropMulti(ByRef lvList As ListView, ByVal x As Single, ByVal y As Single)
Dim objDrag As ListItem
Dim objDrop As ListItem
Dim objNew As ListItem
Dim objSub As ListSubItem
Dim intIndex As Integer
Dim intLoop As Integer
Dim intCount As Integer
Dim intSelected As Integer
Dim arrItems() As ListItem

Set objDrop = lvList.HitTest(x, y)
Set objDrag = lvList.SelectedItem
If (objDrop Is Nothing) Or (objDrag Is Nothing) Then
   Set lvList.DropHighlight = Nothing
   Set objDrop = Nothing
   Set objDrag = Nothing
   Exit Sub
End If
    
intIndex = objDrop.Index
intCount = lvList.ListItems.Count
intSelected = 0
Set lvList.DropHighlight = Nothing
For intLoop = 1 To intCount
    If lvList.ListItems(intLoop).Selected Then
       intSelected = intSelected + 1
       ReDim Preserve arrItems(1 To intSelected) As ListItem
       Set arrItems(intSelected) = lvList.ListItems(intLoop)
    End If
Next

For intLoop = UBound(arrItems) To LBound(arrItems) Step -1
    lvList.ListItems.Remove arrItems(intLoop).Index
Next

For intLoop = UBound(arrItems) To LBound(arrItems) Step -1
    Set objDrag = arrItems(intLoop)
    Set objNew = lvList.ListItems.Add(intIndex, objDrag.Key, objDrag.Text, objDrag.Icon, objDrag.SmallIcon)
    If objDrag.ListSubItems.Count > 0 Then
       For Each objSub In objDrag.ListSubItems
           objNew.ListSubItems.Add objSub.Index, objSub.Key, objSub.Text, objSub.ReportIcon, objSub.ToolTipText
       Next
    End If
objNew.Selected = True
Next

ReDim arrItems(1)
Set arrItems(1) = Nothing
Set objNew = Nothing
Set objDrag = Nothing
Set objDrop = Nothing
End Sub

Dilanjutkan dengan syntak berikutnya, copykan syntak dibawah ini sesuai dengan mekanisme dan komponen pada form (tulisan cetak warna biru)

Private Sub Form_Load()
ListView1.ColumnHeaders.Clear
ListView1.ColumnHeaders.Add , , “Column (1)”, 1700
ListView1.ColumnHeaders.Add , , “Column (2)”, 1700
ListView1.ColumnHeaders.Add , , “Column (3)”, 1700
ListView1.ColumnHeaders.Add , , “Column (4)”, 1700

Dim intLoop As Integer
Dim objItem As ListItem
With ListView1
For intLoop = 1 To 20
    Set objItem = .ListItems.Add(, , “Column ” & intLoop)
    objItem.ListSubItems.Add , , “Column ” & intLoop
    objItem.ListSubItems.Add , , “Column ” & intLoop
Next
Set objItem = Nothing
End With
End Sub

Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, _
Shift As Integer, x As Single, y As Single)

Call LVDragDropMulti(ListView1, x, y)
    
End Sub

Private Sub ListView1_OLEDragOver(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, _
Shift As Integer, x As Single, y As Single, State As Integer)

Set ListView1.DropHighlight = ListView1.HitTest(x, y)

End Sub

Simpan dan RUN/F5. Klik salah satu data pada listiview lalu tarik pindahkan ke bab pertama atau paling bawah sesuai impian agan, secara otomatis subitems yang terblok akan berpindah ke kolom sesuai dengan arah mouse agan. Untuk lebih jelasnya sourcode ini sanggup didownload di LINK INI. Semoga artikel kali ini sanggup bermanfaat bagi pembaca-pembaca sekalian.

Author: 
    author
    No related post!