有关treeview的问题,高分求教!

dongbeiren 2003-01-09 12:07:58
假如在treeview控件中,node的tag和text属性均为唯一,请问在程序中如何根据他们找到相应节点:
dim newnode as new treenode
newnode=?
...全文
28 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongbeiren 2003-01-10
  • 打赏
  • 举报
回复
to HellMaster(李晋):
首先谢谢,但有一问题,在你的循环中,如果所找节点不在第一个根节点(假如根节点有几个)底下,那是找不到的,请再斟酌。
HellMaster 2003-01-10
  • 打赏
  • 举报
回复
不错
不过,有一个地方会出问题

If CInt(Trim(tNode.Tag)) = txt Then

如果tag不设置的话就会出错
最好判断一下
dongbeiren 2003-01-10
  • 打赏
  • 举报
回复
to hellmaster(李晋):
程序如下,功能实现了,再次感谢你的帮助
Private Function GetNode(ByVal obj As TreeNodeCollection, ByVal txt As Integer) As TreeNode
Dim tNode As New TreeNode()
Dim oldnode As TreeNode
For Each tNode In obj
If CInt(Trim(tNode.Tag)) = txt Then
Return tNode
Else
If tNode.Nodes.GetEnumerator.MoveNext() Then
oldnode = GetNode(tNode.Nodes, txt)
If Not IsNothing(oldnode) Then
Return oldnode
End If
End If
End If
Next
' Return oldnode
End Function
HellMaster 2003-01-10
  • 打赏
  • 举报
回复

我看一下
dongbeiren 2003-01-10
  • 打赏
  • 举报
回复
在最外层的else内用return,你的想法是实现不了的,你的情况是,假如第二级有两个节点,这两个节点都有子节点,则你的函数不会遍历第二级第二个节点。
HellMaster 2003-01-10
  • 打赏
  • 举报
回复
是从上往下找的,你要找上一级别的节点当然找不到

你说
“treeview控件中,node的tag和text属性均为唯一”
所以,你只要用最根节点的查找就可以了,就像我给你的示例
GetNode(Me.TreeView1.Nodes, "findtext")
用TreeView1.Nodes则是找TreeView1中所有级别的节点,也就是所有的节点
dongbeiren 2003-01-10
  • 打赏
  • 举报
回复
to HellMaster(李晋):
试过,但只有该节点始终在nodes中的第一个节点中才能找到,就是说这个循环只有在最末级节点中才循环,如没有找到,则返回nothing,一直返回给调用函数,而上一级节点的兄弟节点没有循环到。请再试试。
HellMaster 2003-01-10
  • 打赏
  • 举报
回复
你试过没有?
我给你的东西是我验证过的

我试过根节点、二级、三级,没问题
其余的也可以

你试一试
有问题再说
hikele 2003-01-09
  • 打赏
  • 举报
回复
HellMaster(李晋) 兄已经说得很好了

不过,楼主,如果你想找到原先的节点的话,不应当用
dim newnode as new treenode 吧
好像应该是:dim newnode as treenode

HellMaster 2003-01-09
  • 打赏
  • 举报
回复
做一个小函数,来实现节点的递归查找

下面就以text属性为例,
Private Function GetNode(ByVal obj As TreeNodeCollection, ByVal txt As String) As Object
Dim tNode As New TreeNode

For Each tNode In obj
If Trim(tNode.Text) = txt Then
Return tNode
Else
If tNode.Nodes.GetEnumerator.MoveNext() Then
Return GetNode(tNode.Nodes, txt)
End If
End If
Next
End Function

调用方法:
假设你的TreeView名为TreeView1,要查找的Text为"findtext",
Dim obj As Object

obj = GetNode(Me.TreeView1.Nodes, "findtext")

If Not IsNothing(obj) Then
'obj就是符合条件的节点
End If
kotogo 2003-01-09
  • 打赏
  • 举报
回复
dim newnode as new treenodeS()
newnode.text=yourvalue
youtreeview.controls.add(newnode)
请参考TreeView控件自动生成的html代码,写法一样的。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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