Foxtable(狐表)用户栏目专家坐堂 → 如何让目录树原来可见节点位置不变


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

主题:如何让目录树原来可见节点位置不变

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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
如何让目录树原来可见节点位置不变  发帖心情 Post By:2017/8/8 15:25:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:目录树.png
图片点击可在新窗口打开查看

计划中有一个5分钟自动刷新目录树中表单可处理记录数的代码,现在问题是每次自动刷新后目录树都会自动滚动到最下面一个节点可见
想实现如果执行前目录树最上面可见的节点是哪个,执行后最上面那个可见节点还是它不改变,要怎么办?
EnsureVisible只能滚动到已知的固定的节点到顶端,每个用户操作时可能最上面那个节点都不一样,刷新后都要保持各自原样

谢谢!


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


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

如果单纯是 EnsureVisible,你可以用一个变量记录当前的。

 

如果是全部的展开信息都需要还原,刷新之前,保存好各个节点的展开信息,可以用字典暂时存放。刷新后,循环每一个节点,根据字典,重新设置一次。


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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/8 15:52:00 [只看该作者]

就是不知道怎么获取当前最上面的那个节点, 比如1楼中采购管理就是最上面的可见节点,代码怎么判断某个节点当前是处于最上面的位置?

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


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

msgbox(CType(e.Form.Controls("TreeView1").BaseControl,Windows.Forms.TreeView).TopNode.FullPath)

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


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

参考

 

Dim trv = e.Form.Controls("TreeView1").basecontrol
msgbox(trv.TopNode.name)


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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/10/6 11:56:00 [只看该作者]

 trv.TopNode.name可以得到第一个节点的名称,但反过来知道某个节点的名称,如"基础数据"这个节点,能否让它显示在目录树的第一个节点呢?
 trv.Nodes("基础数据").EnsureVisible  只能让它可见,但不一定是可见的第一个节点

谢谢!

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


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

不是可以直接赋值?

 

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim btrv = trv.basecontrol
btrv.TopNode = btrv.Nodes("基础数据")


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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/11/19 17:49:00 [只看该作者]

为什么7楼的代码在窗口的afterload最后面时不起作用,在窗口中设计一个按钮,将代码写在click中,在窗口打开后点击这个按钮就可以

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


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

以下是引用HappyFt在2017/11/19 17:49:00的发言:
为什么7楼的代码在窗口的afterload最后面时不起作用,在窗口中设计一个按钮,将代码写在click中,在窗口打开后点击这个按钮就可以

 

需要窗口显示出来代码才生效。

 

代码要写到timertick事件,延时一两秒再设置即可。


 回到顶部