Foxtable(狐表)用户栏目专家坐堂 → 如何在两棵相同的树上定位选中的节点


  共有5067人关注过本帖树形打印复制链接

主题:如何在两棵相同的树上定位选中的节点

帅哥哟,离线,有人找我吗?
sunsenfeng
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:599 积分:4188 威望:0 精华:0 注册:2011/12/21 11:25:00
如何在两棵相同的树上定位选中的节点  发帖心情 Post By:2013/10/5 20:15:00 [只看该作者]

请教老师

有两棵相同的目录树,在不同的窗口上,如何用其中一棵树上获得的节点的Fullpath,将所选节点还原在另一棵树上

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/5 20:30:00 [只看该作者]

没有简单的方法,只能是遍历整棵树比较,再选中。

 回到顶部
帅哥哟,离线,有人找我吗?
sunsenfeng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:599 积分:4188 威望:0 精华:0 注册:2011/12/21 11:25:00
  发帖心情 Post By:2013/10/5 20:45:00 [只看该作者]

甜老师,能不能给个简单例子?

多谢


 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2013/10/5 20:53:00 [只看该作者]

没做过,但有个建议可以试试

 

 

点击第一棵树时,向上遍历每个节点的 Index 组成字符串变量 传递

 

第二棵树 接到后,分割变量,依次展开  Nodes(Index).Expand()

 

前提是两棵树完全一样。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/5 20:54:00 [只看该作者]

 参考代码

Dim fullPath As String = "ddd\ddd\ddd"
For Each nd As WinForm.TreeNode In tv.AllNodes
    If nd.FullPath = fullPath Then
        tv.SelectedNode = nd
        Exit For
    End If
Next

 回到顶部
帅哥哟,离线,有人找我吗?
sunsenfeng
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:599 积分:4188 威望:0 精华:0 注册:2011/12/21 11:25:00
  发帖心情 Post By:2013/10/5 21:12:00 [只看该作者]

甜老师,伟大的创意

 


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2013/10/5 21:21:00 [只看该作者]

如果真的是两棵一模一样的树,那就好办了,假如改变目录树1的某节点复选框,目录树2跟着同步:

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd As WinForm.TreeNode

Dim s As String = e.node.FullPath
Dim Values() As String
Values = s.split("\")
For Index As Integer = 0 To Values.Length - 1
    If Index = 0
        nd = tr.Nodes(Values(Index))
    Else
        nd = nd.Nodes(Values(Index))
    End If
Next
nd.Checked = e.Node.Checked '这就是您要的节点


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/5 21:38:00 [只看该作者]


 呵呵,楼主,如7楼代码,一层一层往下找也行,更简单。
[此贴子已经被作者于2013-10-5 21:38:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/10/5 22:26:00 [只看该作者]

窗口1中的目录树NodeMouseClick

If Forms("窗口2").Opened = False Then
    Forms("窗口2").Open()
End If
Dim tr As WinForm.TreeView = Forms("窗口2").Controls("TreeView1")
Dim nd As WinForm.TreeNode
For Each nd In tr.AllNodes
    If nd.DataRow("_Identify") = e.Node.DataRow("_Identify") AndAlso nd.Name = e.Node.Name AndAlso nd.Index = e.Node.Index Then
        tr.CollapseAll()
        nd.EnsureVisible()
        Exit For
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
sunsenfeng
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:599 积分:4188 威望:0 精华:0 注册:2011/12/21 11:25:00
  发帖心情 Post By:2013/10/5 22:27:00 [只看该作者]

谢谢程老师,代码珍藏

 回到顶部