我的Email是[email protected]
能给我发一个过来吗?
谢谢!

解决方案 »

  1.   

    就是drop的两个事件里面的东西
      

  2.   

    也发给我一个吧!谢谢
    *treeview*.ocx
    *treeview*.dll
    谢谢1!
      

  3.   

    TreeView 和 ListView 综合实例 ...'实现 
    '1.从 Listview 拖拽 Item 加到 Treeview 的 Node 
    '2.添加 Treeview 节点时,可自动滚动 
    '3.编辑节点的 Text 
    '4.Treeview Node Menu 
    '5.Listview Item Double Click、Menu 
    'Objects: 
    'FORM1、Treeview1、Listview1、Timer1、Command1 
    Option Explicit 
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
    Private Const WM_VSCROLL = &H115 
    Private Const WM_HSCROLL = &H114 
    Dim mfX As Single 
    Dim mfY As Single 
    Private Enum ScrollDirection 
       NoScroll = 0 
       VScrollBarUp = 1 
       HScrollBarRight = 2 
       VScrollBarDown = 3 
       HScrollBarLeft = 4 
    End Enum 
    Dim sdX As ScrollDirection 
    Private Sub Command1_Click() 
    If Not ListView1.SelectedItem Is Nothing Then 
      Dim NodeX As MSComctlLib.Node 
      If TreeView1.SelectedItem Is Nothing Then 
         Set NodeX = TreeView1.Nodes.Add(, , GetNextKey() & ListView1.SelectedItem.Text, ListView1.SelectedItem.Text) 
      Else 
         Set NodeX = TreeView1.Nodes.Add(TreeView1.SelectedItem, tvwChild, GetNextKey() & ListView1.SelectedItem.Text, ListView1.SelectedItem.Text) 
      End If 
      NodeX.Selected = True 
      'TreeView1.SelectedItem.Expanded = True 
      TreeView1.StartLabelEdit 
    End If 
    End Sub 
    Private Sub Command2_Click() '删除 
    Dim i As Long 
    For i = ListView1.ListItems.Count To 1 Step -1 
       If ListView1.ListItems.Item(i).Selected Then 
          ListView1.ListItems.Remove i 
       End If 
    Next i 
    End Sub 
    Private Sub FORM_DragOver(Source As Control, x As Single, y As Single, State As Integer) 
    If Source Is TreeView1 Then 
      Timer1.Enabled = False 
    End If 
    End Sub 
    Private Sub FORM_Load() 
    Timer1.Enabled = False 
    Timer1.Interval = 100 
    TreeView1.Style = tvwTreelinesPlusMinusPictureText 
    Dim i As Long 
    Dim j As Long 
    Dim NodeX As MSComctlLib.Node 
    TreeView1.Style = tvwTreelinesPlusMinusPictureText 
    Dim Temp As String 
    For i = 1 To 10 
       Temp = GetNextKey 
       Set NodeX = TreeView1.Nodes.Add(, , Temp, "Node " & TreeView1.Nodes.Count + 1) 
           For j = 0 To 5 
           TreeView1.Nodes.Add Temp, tvwChild, GetNextKey, "Node " & TreeView1.Nodes.Count + 1 
       Next 
       NodeX.Expanded = True 
    Next i 
    TreeView1.HideSelection = False 
    TreeView1.LabelEdit = tvwManual 
    ListView1.ListItems.Add , , "cc" 
    ListView1.ListItems.Add , , "dd" 
    ListView1.ListItems.Add , , "ee" 
    ListView1.ListItems.Add , , "ff" 
    ListView1.OLEDragMode = ccOLEDragAutomatic 
    ListView1.LabelEdit = lvwManual 
    ListView1.HideSelection = False 
    ListView1.MultiSelect = True 
    Command1.Caption = "<<" 
    Command2.Caption = "删除" 
    End Sub 
    Private Sub ListView1_DblClick() 
    If Not ListView1.SelectedItem Is Nothing Then 
      VBA.MsgBox ListView1.SelectedItem.Text 
    End If 
    End Sub 
    Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 
    If Not ListView1.HitTest(x, y) Is ListView1.SelectedItem Then 
      Set ListView1.SelectedItem = Nothing 
    End If 
    End Sub 
    Private Sub ListView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) 
    If Button = vbLeftButton And Not ListView1.SelectedItem Is Nothing Then 
      ListView1.DragIcon = ListView1.SelectedItem.CreateDragImage 
      ListView1.Drag vbBeginDrag 
    End If 
    End Sub 
    Private Sub MenuNodeClose_Click() 
    If TreeView1.SelectedItem.Children > 0 Then 
      TreeView1.SelectedItem.Expanded = False 
    End If 
    End Sub 
    Private Sub MenuNodeExpand_Click() 
    If TreeView1.SelectedItem.Children > 0 Then 
      TreeView1.SelectedItem.Expanded = True 
    End If 
    End Sub 
    Private Sub MenuNodesRename_Click() 
    If Not TreeView1.SelectedItem Is Nothing Then 
       TreeView1.StartLabelEdit 
    End If 
    End Sub 
    Private Sub TreeView1_AfterLabelEdit(Cancel As Integer, NewString As String) 
    If VBA.Len(NewString) <= 0 Then 
      MsgBox "error" 
      TreeView1.StartLabelEdit 
      Cancel = 1 
    End If 
    End Sub 
    Private Sub TreeView1_DblClick() 
    If Not TreeView1.SelectedItem Is Nothing Then 
      '只响应叶节点(没有孩子) 
      If TreeView1.SelectedItem.Children = 0 Then 
         VBA.MsgBox TreeView1.SelectedItem.Text 
      End If 
    End If 
    End Sub 
    Private Sub TreeView1_DragDrop(Source As Control, x As Single, y As Single) 
    If Not TreeView1.DropHighlight Is Nothing Then 
      Dim NodeX As MSComctlLib.Node 
      Set NodeX = TreeView1.Nodes.Add(TreeView1.DropHighlight.Key, tvwChild, GetNextKey() & ListView1.SelectedItem.Text, ListView1.SelectedItem.Text) 
      TreeView1.DropHighlight.Expanded = True 
      NodeX.Selected = True 
      TreeView1.StartLabelEdit 
    End If 
    Timer1.Enabled = False 
    End Sub 
    Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, State As Integer) 
    If Not TreeView1.HitTest(x, y) Is Nothing Then 
      Set TreeView1.DropHighlight = TreeView1.HitTest(x, y) 
      mfX = x 
      mfY = y 
      If y > 0 And y < 100 Then 
         sdX = VScrollBarUp 
      ElseIf y > (TreeView1.Height - 400) And y < TreeView1.Height Then 
         sdX = VScrollBarDown 
      ElseIf x > 0 And x < 100 Then 
         sdX = HScrollBarLeft 
      ElseIf x > (TreeView1.Width - 400) And x < TreeView1.Width Then 
         sdX = HScrollBarRight 
      Else 
         sdX = NoScroll 
      End If 
      Timer1.Enabled = True 
    End If 
    End Sub 
    Private Sub Timer1_Timer() 
    Set TreeView1.DropHighlight = TreeView1.HitTest(mfX, mfY) 
    Select Case sdX 
          Case VScrollBarUp 
               SendMessage TreeView1.hwnd, WM_VSCROLL, 0, vbNull 
          Case VScrollBarDown 
               SendMessage TreeView1.hwnd, WM_VSCROLL, 1, vbNull 
          Case HScrollBarLeft 
               SendMessage TreeView1.hwnd, WM_HSCROLL, 0, vbNull 
          Case HScrollBarRight 
               SendMessage TreeView1.hwnd, WM_HSCROLL, 1, vbNull 
          Case NoScroll 
               If Not TreeView1.DropHighlight Is Nothing Then 
                  If TreeView1.DropHighlight.Children > 0 Then 
                     TreeView1.DropHighlight.Expanded = True 
                  End If 
               End If 
    End Select 
    End Sub 
    Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) 
    Timer1.Enabled = False 
    If Button = vbRightButton Then 
      If TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then 
         If Not TreeView1.SelectedItem Is Nothing Then 
            If TreeView1.SelectedItem.Children > 0 Then 
               MenuNodeExpand.Visible = True 
               MenuNodeExpand.Caption = "Expand Node: " & TreeView1.SelectedItem.Text 
               MenuNodeClose.Visible = True 
               MenuNodeClose.Caption = "Close Node: " & TreeView1.SelectedItem.Text 
            Else 
               MenuNodeExpand.Visible = False 
               MenuNodeClose.Visible = False 
            End If 
            Me.PopupMenu MenuNodes 
         End If 
      End If 
    End If 
    End Sub 
    Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 
    TreeView1.DropHighlight = TreeView1.HitTest(x, y) 
    If Not TreeView1.DropHighlight Is Nothing Then 
      TreeView1.SelectedItem = TreeView1.HitTest(x, y) 
    End If 
    Set TreeView1.DropHighlight = Nothing 
    End Sub 
    Private Function GetNextKey() As String 
    Dim sNewKey As String 
    Dim iHold As Integer 
    Dim i As Integer 
    On Error GoTo myerr 
    iHold = Val(TreeView1.Nodes(1).Key) 
    For i = 1 To TreeView1.Nodes.Count 
       If Val(TreeView1.Nodes(i).Key) > iHold Then 
          iHold = Val(TreeView1.Nodes(i).Key) 
       End If 
    Next 
    iHold = iHold + 1 
    sNewKey = VBA.CStr(iHold) & "_" 
    GetNextKey = sNewKey 
    Exit Function 
    myerr: 
    GetNextKey = "1_" 
    End Function