首先我是想当鼠标移到节点上时指针变成手形,不在节点上时是箭头,所以用了下面的一段代码:
Private Sub FileList_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Set FileList.SelectedItem = FileList.HitTest(x, y)
    If FileList.SelectedItem Is Nothing Then
        FileList.MousePointer = 0
    Else
        FileList.MousePointer = 99
    End If
End Sub
下面这段代码在有子节点的时候好像都用不上。
Private Sub FileList_NodeClick(ByVal Node As MSComctlLib.Node)
    If FileList.SelectedItem Is Nothing Or FileList.SelectedItem.Children <> 0 Then Exit Sub
    IFP = IFL & FileList.SelectedItem.FullPath
    InfoFiles IFP, "*.*"
End Sub
但是这样之后麻烦也跟着来了,就是当鼠标移到节点时会自动展开这个节点的子节点,一移开又收起了这个节点的子节点,很苦恼的是想要展开的时候很方便,但是不想要收起的时候吧总是会一不小心移开了被收起。
请问大家可以在哪设置或是有什么代码解决这个问题。listview鼠标

解决方案 »

  1.   

    你直接设置HotTracking属性为True不就可以了,干嘛弄那么复杂?
    还有你说的应该是 TreeView1 吧,Listview 没什么节点展开的呀。
      

  2.   

    不好意思,是Treeview
    可能你还没有明白我的意思,我是希望鼠标在节点上移开的时候,节点不要自动折叠收起。我是希望收起的时候用鼠标单击节点才收起。
      

  3.   

    本来你你用处理 MouseMove 事件直接把 HotTracking 属性为 True 就搞定的事情为什么要画蛇添足呢?当然,你也可以通过设置 Expanded 属性来控制节点是否为展开,如:Private Sub TreeView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim nodeobj As Node
        Dim exState As Boolean
        Set nodeobj = TreeView1.HitTest(x, y)
        If Not nodeobj Is Nothing Then
            exState = nodeobj.Expanded                  ' 先记录原始节点的状态
            Set TreeView1.SelectedItem = nodeobj        ' 设置节点为选择
            TreeView1.SelectedItem.Expanded = exState   ' 无论是否展开,都保持原始的状态
            TreeView1.MousePointer = 99
        Else
            TreeView1.MousePointer = 0
        End If
    End Sub
      

  4.   

    笔误:本来你不用处理 MouseMove 事件...
      

  5.   

    如果不用MouseMove是可以解决问题,只是我想让鼠标指针不一样,就是选到的时候指针是小手,在空白处是箭头,没想到会那样