以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何让目录树原来可见节点位置不变  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=104919)

--  作者:happyft
--  发布时间:2017/8/8 15:25:00
--  如何让目录树原来可见节点位置不变

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

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

谢谢!


--  作者:有点甜
--  发布时间:2017/8/8 15:30:00
--  

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

 

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


--  作者:HappyFt
--  发布时间:2017/8/8 15:52:00
--  
就是不知道怎么获取当前最上面的那个节点, 比如1楼中采购管理就是最上面的可见节点,代码怎么判断某个节点当前是处于最上面的位置?
--  作者:逛逛
--  发布时间:2017/8/8 16:18:00
--  
msgbox(CType(e.Form.Controls("TreeView1").BaseControl,Windows.Forms.TreeView).TopNode.FullPath)
--  作者:有点甜
--  发布时间:2017/8/8 16:21:00
--  

参考

 

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


--  作者:HappyFt
--  发布时间:2017/10/6 11:56:00
--  
 trv.TopNode.name可以得到第一个节点的名称,但反过来知道某个节点的名称,如"基础数据"这个节点,能否让它显示在目录树的第一个节点呢?
 trv.Nodes("基础数据").EnsureVisible  只能让它可见,但不一定是可见的第一个节点

谢谢!

--  作者:有点甜
--  发布时间:2017/10/6 12:02:00
--  

不是可以直接赋值?

 

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


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

 

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

 

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