以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 项目发布后目录树节点排序怎么会发生变化? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=91670) |
-- 作者:hzcaqjf -- 发布时间:2016/10/16 20:47:00 -- 项目发布后目录树节点排序怎么会发生变化? 如题,目录树节点是根据导航窗口中控件标题生成的. 项目发布前后节点排列顺序不一致.而foxtable中node又没有sort方法. |
-- 作者:狐狸爸爸 -- 发布时间:2016/10/17 7:43:00 -- BuildTree可以设置排序列的:
|
-- 作者:hzcaqjf -- 发布时间:2016/10/17 8:33:00 -- 狐爸,目录树节点是根据导航窗口中控件标题生成的,不知道如何使用BuildTree方法.请指教: 生成目录树代码: Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") Dim nd As WinForm.TreeNode nd = trv.Nodes.Add("全部按钮","全部按钮") Dim tb As WinForm.NavBar = Forms("导航").Controls("NavBar1") Dim pg As WinForm.NavPage For Each pg In tb.NavPages Dim n = nd.nodes.add(pg.name) If pg.Children.Count > 0 Then Functions.Execute("AddChild",n,pg) Next 内部函数"AddChild"代码: Dim node As WinForm.TreeNode = Args(0) Dim ctl = Args(1) For Each c As object In ctl.Children If Typeof c Is WinForm.SplitContainer Then If c.panel1.Children.Count > 0 Then Functions.Execute("AddChild",node,c.panel1) If c.panel2.Children.Count > 0 Then Functions.Execute("AddChild",node,c.panel2) Else Dim n = node.Nodes.Add(c.text) If Typeof c Is WinForm.GroupBox Then If c.Children.Count > 0 Then Functions.Execute("AddChild",n,c) End If End If Next |
-- 作者:有点蓝 -- 发布时间:2016/10/17 9:07:00 -- 先排序在添加,函数的用法参考自己做 Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") Dim nd As WinForm.TreeNode nd = trv.Nodes.Add("全部按钮","全部按钮") Dim tb As WinForm.NavBar = Forms("导航").Controls("NavBar1") Dim pg As WinForm.NavPage Dim lst As new List(of String) Dim dict As new Dictionary(of String, WinForm.Control) For Each pg In tb.NavPages lst.add(pg.name) dict.Add(pg.name,pg) Next Dim arr = lst.ToArray Array.Sort(arr) For i As Integer = 0 To lst.Count - 1 Dim n = nd.nodes.add(arr(i)) If dict(arr(i)).Children.Count > 0 Then Functions.Execute("AddChild",n,dict(arr(i))) Next
|
-- 作者:hzcaqjf -- 发布时间:2016/10/17 16:45:00 -- 蓝大师,根据您的代码,一级节点已经能够排序. 但是,为了排序所有节点,不知怎样修改Addchild这个内部函数,修改了半天也没修改好. 只好烦请蓝大师了. (想直接上传附件,但是网页上传按钮不知为何不见了,无法上传.) |
-- 作者:有点蓝 -- 发布时间:2016/10/17 16:49:00 -- 贴出你的代码 |
-- 作者:hzcaqjf -- 发布时间:2016/10/17 17:51:00 -- 蓝大师,这是原来的自定义函数AddChild的代码,虽能执行,但不能对节点排序: Dim node As WinForm.TreeNode = Args(0) Dim ctl = Args(1) For Each c As object In ctl.Children If Typeof c Is WinForm.SplitContainer Then If c.panel1.Children.Count > 0 Then Functions.Execute("AddChild",node,c.panel1) If c.panel2.Children.Count > 0 Then Functions.Execute("AddChild",node,c.panel2) Else Dim n = node.Nodes.Add(c.text) If Typeof c Is WinForm.GroupBox Then If c.Children.Count > 0 Then Functions.Execute("AddChild",n,c) End If End If Next 这也是以前红袍老师提供的,只是没想到项目发布后节点的顺序与发布前不一致,而项目的按钮授权与节点的顺序密切相关.
[此贴子已经被作者于2016/10/17 18:01:02编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/17 17:58:00 -- 贴出你按4楼的方式改造后不能执行的代码 |
-- 作者:hzcaqjf -- 发布时间:2016/10/17 18:05:00 -- 蓝大师,要不明天贴出来(在办公室电脑上),我晚上在家里的电脑上再想想看. |
-- 作者:hzcaqjf -- 发布时间:2016/10/17 21:09:00 -- 蓝大师,根据您的代码的启发,已完成对二级节点的排序, 不过通用型的递归函数还是想不出来. 这是我的自定义函数,自己项目的要求已经达到,即项目发布前后,目录树节点排序完全相同一致: Dim node As WinForm.TreeNode = Args(0) Dim ctl As WinForm.NavPage = Args(1) Dim lst As new List(of String) For Each c As WinForm.button In ctl.Children lst.add(c.text) Next Dim arr = lst.ToArray Array.Sort(arr) For i As Integer = 0 To lst.Count - 1 Dim n = node.nodes.add(arr(i)) Next |