TreeView的OLEDragDrop事件怎么做呀?现在是要把TreeView里的东西,拖到ListView里面。能简单说明一下吗?当然,有个小例子的话,就更好了……谢谢~~~

解决方案 »

  1.   

    Option Explicit
     
    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&auml;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之间拖放数据
      

  2.   

    '// 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
        
        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
      

  3.   

    上面的代码在一个TreeView、ListView和另外ListView之间拖放数据,运行上面的代码,你需要在窗体上创建一个Treeview,Name设置为tvProject,两个ListView,View属性设置为3,另外还需要添加一个TextBox控件。
    然后运行程序,你就可以从TreeView向ListView2中拖放数据了。
      

  4.   

    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
      

  5.   

    要是ListView里面有很多Key,那该怎么做呀?就是拖动之后 根据Key来确定变量该放到哪个Key里面.