问题: 如何响应 ListView 控件 ListItem (或: TreeView 控件 Node) 的"鼠标双击"事件? 解答: Private Sub Form_Load() 'ListView: ListView1.ListItems.Add , , "aa" ListView1.ListItems.Add , , "bb" ListView1.HideSelection = False 'TreeView: Dim i As Long Dim j As Long Dim NodeX As MSComctlLib.Node TreeView1.Style = tvwTreelinesPlusMinusPictureText Dim Temp As Long For i = 1 To 10 Temp = TreeView1.Nodes.Count + 1 Set NodeX = TreeView1.Nodes.Add(, , "Node" & Temp, "Node " & Temp) For j = 0 To 5 TreeView1.Nodes.Add Temp, tvwChild, "Node" & TreeView1.Nodes.Count + 1, "Node " & TreeView1.Nodes.Count + 1 Next NodeX.Expanded = True Next i End Sub Private Sub ListView1_DblClick() If Not ListView1.SelectedItem Is Nothing Then VBA.MsgBox "Item: [" & ListView1.SelectedItem.Text & "] Double Click!" 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 '提醒注意的是当编程 TreeView 控件 Node 的"鼠标双击"事件时,应只响应"叶子(没有孩子的)节点": 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_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Not TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then Set TreeView1.SelectedItem = Nothing End If End Sub问题: 如何实现 TreeView 控件 Node 的"鼠标右键弹出菜单",并响应选单(Menu Click)事件? 解答: 菜单结构: MenuNodes -> MenuNodesNodeX Private Sub Form_Load() Dim i As Integer TreeView1.Style = tvwTreelinesPlusMinusPictureText For i = 1 To 20 TreeView1.Nodes.Add , , "Node" & i, "Node " & i Next i TreeView1.HideSelection = False TreeView1.LabelEdit = tvwManual End Sub Private Sub MenuNodesNodeX_Click() VBA.MsgBox "Node: [" & MenuNodesNodeX.Caption & "] Pop Menu Click!" End Sub Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = vbRightButton Then If TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then If Not TreeView1.SelectedItem Is Nothing Then MenuNodesNodeX.Caption = TreeView1.SelectedItem.Text 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) If Not TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then Set TreeView1.SelectedItem = Nothing End If End Sub TreeView 和 ListView 综合实例 ... http://www.triaton.com.cn/cgi-bin/lb5k/topic.cgi?forum=4&topic=31&show=75
如果循环判断selected属性,那岂不是没有选择的项被全部选中了,而我只想选中单击了的项。
我用的是图标显示
我是用右键单击啊,我是想实现类似左键单击的功能。
但是用右键单击后,怎么知道单击的是哪一listitem呢?
首先触发ItemClick事件,再触发MouseUp事件,所以,利用这个,可以:
做两个菜单,在ItemClick事件Popup一个菜单,在MouseUp事件Popup另一个菜单,当然,可以用ListView1.SelectedItem.Key来判别目前点的是哪一个Item,只要你点的是空白的地方,就自然的触发了MouseUp事件了。祝你好运!
http://www.triaton.com.cn/cgi-bin/lb5k/topic.cgi?forum=4&topic=86&show=0
问题: 如何响应 ListView 控件 ListItem (或: TreeView 控件 Node) 的"鼠标双击"事件?
解答: Private Sub Form_Load()
'ListView:
ListView1.ListItems.Add , , "aa"
ListView1.ListItems.Add , , "bb"
ListView1.HideSelection = False
'TreeView:
Dim i As Long
Dim j As Long
Dim NodeX As MSComctlLib.Node
TreeView1.Style = tvwTreelinesPlusMinusPictureText
Dim Temp As Long
For i = 1 To 10
Temp = TreeView1.Nodes.Count + 1
Set NodeX = TreeView1.Nodes.Add(, , "Node" & Temp, "Node " & Temp)
For j = 0 To 5
TreeView1.Nodes.Add Temp, tvwChild, "Node" & TreeView1.Nodes.Count + 1, "Node " & TreeView1.Nodes.Count + 1
Next
NodeX.Expanded = True
Next i
End Sub
Private Sub ListView1_DblClick()
If Not ListView1.SelectedItem Is Nothing Then
VBA.MsgBox "Item: [" & ListView1.SelectedItem.Text & "] Double Click!"
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
'提醒注意的是当编程 TreeView 控件 Node 的"鼠标双击"事件时,应只响应"叶子(没有孩子的)节点":
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_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Not TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then
Set TreeView1.SelectedItem = Nothing
End If
End Sub问题: 如何实现 TreeView 控件 Node 的"鼠标右键弹出菜单",并响应选单(Menu Click)事件?
解答: 菜单结构: MenuNodes -> MenuNodesNodeX
Private Sub Form_Load()
Dim i As Integer
TreeView1.Style = tvwTreelinesPlusMinusPictureText
For i = 1 To 20
TreeView1.Nodes.Add , , "Node" & i, "Node " & i
Next i
TreeView1.HideSelection = False
TreeView1.LabelEdit = tvwManual
End Sub
Private Sub MenuNodesNodeX_Click()
VBA.MsgBox "Node: [" & MenuNodesNodeX.Caption & "] Pop Menu Click!"
End Sub
Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbRightButton Then
If TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then
If Not TreeView1.SelectedItem Is Nothing Then
MenuNodesNodeX.Caption = TreeView1.SelectedItem.Text
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)
If Not TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then
Set TreeView1.SelectedItem = Nothing
End If
End Sub
TreeView 和 ListView 综合实例 ...
http://www.triaton.com.cn/cgi-bin/lb5k/topic.cgi?forum=4&topic=31&show=75