For i = 1 To 5 Set objItem = .ListItems.Add(, , "Eintrag " & i) .ListItems(i).SubItems(1) = "Sub" ' Demo-Text hinzufügen Next End With
With ListView2 .ColumnHeaders.Add , , "tx1", 800 'Demo-Header hinzufügen .ColumnHeaders.Add , , "tx2", 800 'Demo-Header hinzufügen .MultiSelect = True .View = lvwReport 'Ansicht: Details .GridLines = True 'Sichtbare Zeilenstriche an .OLEDropMode = ccOLEDropManual End With End Sub
Private Sub ListView1_OLESetData(Data As MSComctlLib.DataObject, _ DataFormat As Integer) ' Beim klick auf ein Listview1 eintrag diesen "nehmen" ' oder bei Mehreren diese durch Enter ("vbCrLf") trennen
Dim i As Integer Dim zw As String
For i = 1 To ListView1.ListItems.Count If ListView1.ListItems(i).Selected Then If Len(zw) <> 0 Then zw = zw & vbCrLf End If zw = zw & ListView1.ListItems(i).Text End If Next
Data.SetData zw DataFormat = vbCFText End Sub
Private Sub ListView2_OLEDragDrop(Data As MSComctlLib.DataObject, _ Effect As Long, Button As Integer, Shift As Integer, x As Single, y _ As Single) ' Einfügen der "gedroppten" Einträge Dim myItems() As String Dim myItemsData As String Dim objItem As ListItem Dim i As Integer
' nur zur Demo der übergebenen Daten If Data.GetFormat(vbCFText) Then Text1.Text = Data.GetData(vbCFText) End If
If Data.GetFormat(vbCFText) Then myItemsData = Data.GetData(vbCFText) myItems = Split(myItemsData, vbCrLf, -1, vbBinaryCompare) For i = LBound(myItems) To UBound(myItems) Set objItem = ListView2.ListItems.Add(, , myItems(i)) Next ListView2.Refresh End If End Sub在两个ListView之间拖放数据
'// variable that tells us if '// we are dragging (ie the user is dragging a node from this treeview control '// or not (ie the user is trying to drag an object from another '// control and/or program) Private blnDragging As BooleanPrivate Sub Form_Load() '// fill the control with some dummy nodes With tvProject.Nodes '.Add , , "root", "hello" .Add , , "Root", "Root Item" '// add some child folders .Add "Root", tvwChild, "ChildFolder1", "TExt1" .Add "Root", tvwChild, "ChildFolder2", "TExt2" .Add "Root", tvwChild, "ChildFolder3", "TExt3" '// add some children to the folders .Add "ChildFolder1", tvwChild, "Child1OfFolder1", "TExt4" .Add "ChildFolder1", tvwChild, "Child2OfFolder1", "TExt5" .Add "ChildFolder2", tvwChild, "Child1OfFolder2", "TExt6" End With
For i = 1 To 5 Set objItem = .ListItems.Add(, , "Eintrag " & i) .ListItems(i).SubItems(1) = "Sub" ' Demo-Text hinzufügen Next End With
With ListView2 .ColumnHeaders.Add , , "tx1", 800 'Demo-Header hinzufügen .ColumnHeaders.Add , , "tx2", 800 'Demo-Header hinzufügen .MultiSelect = True .View = lvwReport 'Ansicht: Details .GridLines = True 'Sichtbare Zeilenstriche an .OLEDropMode = ccOLEDropManual End With End Sub Private Sub tvProject_OLESetData(Data As MSComctlLib.DataObject, DataFormat As Integer) Dim zw As String
If Not (tvProject.SelectedItem Is Nothing) Then zw = tvProject.SelectedItem.Text End If
Data.SetData zw DataFormat = vbCFText End Sub Private Sub ListView1_OLESetData(Data As MSComctlLib.DataObject, _ DataFormat As Integer) ' Beim klick auf ein Listview1 eintrag diesen "nehmen" ' oder bei Mehreren diese durch Enter ("vbCrLf") trennen
Dim i As Integer Dim zw As String
For i = 1 To ListView1.ListItems.Count If ListView1.ListItems(i).Selected Then If Len(zw) <> 0 Then zw = zw & vbCrLf End If zw = zw & ListView1.ListItems(i).Text End If Next
Data.SetData zw DataFormat = vbCFText End Sub
Private Sub ListView2_OLEDragDrop(Data As MSComctlLib.DataObject, _ Effect As Long, Button As Integer, Shift As Integer, x As Single, y _ As Single) ' Einfügen der "gedroppten" Eintr?ge Dim myItems() As String Dim myItemsData As String Dim objItem As ListItem Dim i As Integer
' nur zur Demo der übergebenen Daten If Data.GetFormat(vbCFText) Then Text1.Text = Data.GetData(vbCFText) End If
If Data.GetFormat(vbCFText) Then myItemsData = Data.GetData(vbCFText) myItems = Split(myItemsData, vbCrLf, -1, vbBinaryCompare) For i = LBound(myItems) To UBound(myItems) Set objItem = ListView2.ListItems.Add(, , myItems(i)) Next ListView2.Refresh End If End Sub
private sub form_load() treeview1.oledragmode=1 end sub '功能:_ 拖动文件到treeview中,获取文件路径Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) If Data.GetFormat(vbCFFiles) Then TreeView1.Nodes.Add , , "Key" & TreeView1.Nodes.Count, Data.Files(1) End If End Sub
Private Sub Form_Load()
'Initialisierung
Dim i As Integer
Dim objItem As ListItem
With ListView1
.ColumnHeaders.Add , , "tx1", 800 'Demo-Header hinzufügen
.ColumnHeaders.Add , , "tx2", 800 'Demo-Header hinzufügen
.MultiSelect = True
.View = lvwReport 'Ansicht: Details
.GridLines = True 'Sichtbare Zeilenstriche an
.OLEDragMode = ccOLEDragAutomatic
For i = 1 To 5
Set objItem = .ListItems.Add(, , "Eintrag " & i)
.ListItems(i).SubItems(1) = "Sub" ' Demo-Text hinzufügen
Next
End With
With ListView2
.ColumnHeaders.Add , , "tx1", 800 'Demo-Header hinzufügen
.ColumnHeaders.Add , , "tx2", 800 'Demo-Header hinzufügen
.MultiSelect = True
.View = lvwReport 'Ansicht: Details
.GridLines = True 'Sichtbare Zeilenstriche an
.OLEDropMode = ccOLEDropManual
End With
End Sub
Private Sub ListView1_OLESetData(Data As MSComctlLib.DataObject, _
DataFormat As Integer)
' Beim klick auf ein Listview1 eintrag diesen "nehmen"
' oder bei Mehreren diese durch Enter ("vbCrLf") trennen
Dim i As Integer
Dim zw As String
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Selected Then
If Len(zw) <> 0 Then
zw = zw & vbCrLf
End If
zw = zw & ListView1.ListItems(i).Text
End If
Next
Data.SetData zw
DataFormat = vbCFText
End Sub
Private Sub ListView2_OLEDragDrop(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, Shift As Integer, x As Single, y _
As Single) ' Einfügen der "gedroppten" Einträge
Dim myItems() As String
Dim myItemsData As String
Dim objItem As ListItem
Dim i As Integer
' nur zur Demo der übergebenen Daten
If Data.GetFormat(vbCFText) Then
Text1.Text = Data.GetData(vbCFText)
End If
If Data.GetFormat(vbCFText) Then
myItemsData = Data.GetData(vbCFText)
myItems = Split(myItemsData, vbCrLf, -1, vbBinaryCompare)
For i = LBound(myItems) To UBound(myItems)
Set objItem = ListView2.ListItems.Add(, , myItems(i))
Next
ListView2.Refresh
End If
End Sub在两个ListView之间拖放数据
'// we are dragging (ie the user is dragging a node from this treeview control
'// or not (ie the user is trying to drag an object from another
'// control and/or program)
Private blnDragging As BooleanPrivate Sub Form_Load()
'// fill the control with some dummy nodes
With tvProject.Nodes
'.Add , , "root", "hello"
.Add , , "Root", "Root Item"
'// add some child folders
.Add "Root", tvwChild, "ChildFolder1", "TExt1"
.Add "Root", tvwChild, "ChildFolder2", "TExt2"
.Add "Root", tvwChild, "ChildFolder3", "TExt3"
'// add some children to the folders
.Add "ChildFolder1", tvwChild, "Child1OfFolder1", "TExt4"
.Add "ChildFolder1", tvwChild, "Child2OfFolder1", "TExt5"
.Add "ChildFolder2", tvwChild, "Child1OfFolder2", "TExt6"
End With
tvProject.OLEDragMode = ccOLEDragAutomatic
Dim i As Integer
Dim objItem As ListItem
With ListView1
.ColumnHeaders.Add , , "tx1", 800 'Demo-Header hinzufügen
.ColumnHeaders.Add , , "tx2", 800 'Demo-Header hinzufügen
.MultiSelect = True
.View = lvwReport 'Ansicht: Details
.GridLines = True 'Sichtbare Zeilenstriche an
.OLEDragMode = ccOLEDragAutomatic
For i = 1 To 5
Set objItem = .ListItems.Add(, , "Eintrag " & i)
.ListItems(i).SubItems(1) = "Sub" ' Demo-Text hinzufügen
Next
End With
With ListView2
.ColumnHeaders.Add , , "tx1", 800 'Demo-Header hinzufügen
.ColumnHeaders.Add , , "tx2", 800 'Demo-Header hinzufügen
.MultiSelect = True
.View = lvwReport 'Ansicht: Details
.GridLines = True 'Sichtbare Zeilenstriche an
.OLEDropMode = ccOLEDropManual
End With
End Sub
Private Sub tvProject_OLESetData(Data As MSComctlLib.DataObject, DataFormat As Integer)
Dim zw As String
If Not (tvProject.SelectedItem Is Nothing) Then
zw = tvProject.SelectedItem.Text
End If
Data.SetData zw
DataFormat = vbCFText
End Sub
Private Sub ListView1_OLESetData(Data As MSComctlLib.DataObject, _
DataFormat As Integer)
' Beim klick auf ein Listview1 eintrag diesen "nehmen"
' oder bei Mehreren diese durch Enter ("vbCrLf") trennen
Dim i As Integer
Dim zw As String
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Selected Then
If Len(zw) <> 0 Then
zw = zw & vbCrLf
End If
zw = zw & ListView1.ListItems(i).Text
End If
Next
Data.SetData zw
DataFormat = vbCFText
End Sub
Private Sub ListView2_OLEDragDrop(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, Shift As Integer, x As Single, y _
As Single) ' Einfügen der "gedroppten" Eintr?ge
Dim myItems() As String
Dim myItemsData As String
Dim objItem As ListItem
Dim i As Integer
' nur zur Demo der übergebenen Daten
If Data.GetFormat(vbCFText) Then
Text1.Text = Data.GetData(vbCFText)
End If
If Data.GetFormat(vbCFText) Then
myItemsData = Data.GetData(vbCFText)
myItems = Split(myItemsData, vbCrLf, -1, vbBinaryCompare)
For i = LBound(myItems) To UBound(myItems)
Set objItem = ListView2.ListItems.Add(, , myItems(i))
Next
ListView2.Refresh
End If
End Sub
然后运行程序,你就可以从TreeView向ListView2中拖放数据了。
treeview1.oledragmode=1
end sub
'功能:_
拖动文件到treeview中,获取文件路径Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
If Data.GetFormat(vbCFFiles) Then
TreeView1.Nodes.Add , , "Key" & TreeView1.Nodes.Count, Data.Files(1)
End If
End Sub