TreeView控件的使用问题!!!!!!!???????????????????????

lzhcsdn4 2005-12-06 04:12:08
假设我在一个窗体中绘制了一个TreeView控件,以及一个按钮控件。
Global VarAll_NodeX As Node'在公共模块中定义
点击按钮控件可以在TreeView控件中生成一些节点,代码如下:
'在TreeView控件中生成节点
.TVModuls.Nodes.Clear'TVModuls是TreeView控件的名称

.TVModuls.LineStyle = tvwRootLines

Set VarAll_NodeX = .TVModuls.Nodes.Add(, , "ModulName", "模型")
VarAll_NodeX.Expanded = True

Set VarAll_NodeX = .TVModuls.Nodes.Add(, , "OtherName", "其他")
VarAll_NodeX.Expanded = True

Set VarAll_NodeX = .TVModuls.Nodes.Add("ModulName", tvwChild, "kk", "Child 1")
Set VarAll_NodeX = .TVModuls.Nodes.Add("kk", tvwChild, , "Child 11")


Set VarAll_NodeX = .TVModuls.Nodes.Add("ModulName", tvwChild, , "Child 2")
Set VarAll_NodeX = .TVModuls.Nodes.Add("ModulName", tvwChild, , "Child 3")

Set VarAll_NodeX = .TVModuls.Nodes.Add("OtherName", tvwChild, , "Child 4")
Set VarAll_NodeX = .TVModuls.Nodes.Add("OtherName", tvwChild, , "Child 5")
Set VarAll_NodeX = .TVModuls.Nodes.Add("OtherName", tvwChild, , "Child 6")

现在我希望的是右键单击TreeView控件中的任何一个节点之后(不是点击TreeView控件中的空白处)回弹出一个菜单,
我可以在菜单中加入一个“删除”一个“增加”菜单项,我分别点击之后可以实现我的不同效果。假设我实现制作
的菜单叫"MenuCtrlNode"。右键单击后用可以用PopupMenu FrmMain.MenuCtrlNode弹出菜单。但是我不知道在什么事件
中嵌入PopupMenu FrmMain.MenuCtrlNode代码。才能实现右键点击任何一个节点之后产生此菜单。此外由于我需要
删除以及增加节点,所以我还希望在右键点击时不但产生一个菜单还要知道右键点击的是那一个节点,比如知道我点击
的当前节点索引号,因改怎样编写代码呢?

望得到大家的帮助,谢谢!
...全文
250 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzhcsdn4 2005-12-07
  • 打赏
  • 举报
回复
是我高错了。问题已经完全解决。谢谢大家了。
lzhcsdn4 2005-12-06
  • 打赏
  • 举报
回复
我需要的功能基本实现了。谢谢大家。只是我还是希望能在点击某个节点(无论是左键还是右键)后,当前节点能反色显示。这样用户才能直观的知道点击了那个节点呀。还是希望大家帮忙呀!
继续关注大家的帮助!
vbman2003 2005-12-06
  • 打赏
  • 举报
回复
楼上的可行

点击空白的地方就会报错。
============================
加上容错处理就可以了
northwolves 2005-12-06
  • 打赏
  • 举报
回复
Private Sub TreeView1_Mousedown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim xnode As Node
Set xnode = Me.TreeView1.HitTest(x, y)
If ObjPtr(xnode) = 0 Then
Exit Sub
ElseIf Button = 2 Then
PopupMenu FrmMain.MenuCtrlNode
TreeView1.Nodes.Item(xnode.Index).Selected = True
End If
End Sub
clear_zero 2005-12-06
  • 打赏
  • 举报
回复
1做个判断
if not tv.hitTest(x,y) is nothing then
Set xnode = Me.TreeView1.HitTest(x, y)
end if

2.这个还真没没试验过:可以让其他节点选中,且不隐藏选中的节点,可能可行。

3.这个方法很好用,一会生,二回熟。以后再作tv的时候会用到呢
lzhcsdn4 2005-12-06
  • 打赏
  • 举报
回复
谢谢大家的帮助!
但是在使用时还是有一些问题:
1。点击空白的地方就会报错。
2。我希望点击了某个节点后,此节点会反色显示,即背景显示成蓝色。该如何编写代码?
3。HitTest(x, y)这个方法我很陌生,有没有别的实现方法呀?

northwolves 2005-12-06
  • 打赏
  • 举报
回复
Private Sub TreeView1_Mousedown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim xnode As Node
Set xnode = Me.TreeView1.HitTest(x, y)
If Button=2 And Not ObjPtr(xnode) = 0 Then PopupMenu FrmMain.MenuCtrlNode
MsgBox xnode.Index
End Sub
supergreenbean 2005-12-06
  • 打赏
  • 举报
回复
Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim oNode As Node
Set oNode = TreeView1.HitTest(x, y)
If Not oNode Is Nothing And Button = vbRightButton Then
'oNode就是你现在点击的节点
PopupMenu mnu
End If
End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧