Foxtable(狐表)用户栏目专家坐堂 → 项目发布后目录树节点排序怎么会发生变化?


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

主题:项目发布后目录树节点排序怎么会发生变化?

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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
项目发布后目录树节点排序怎么会发生变化?  发帖心情 Post By:2016/10/16 20:47:00 [显示全部帖子]

如题,目录树节点是根据导航窗口中控件标题生成的.
项目发布前后节点排列顺序不一致.而foxtable中node又没有sort方法.
请问有别的方法能使目录树节点的排序与发布前保持一致吗?
图片点击可在新窗口打开查看此主题相关图片如下:发布前.jpg
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:发布后.jpg
图片点击可在新窗口打开查看


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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
  发帖心情 Post By: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

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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
  发帖心情 Post By:2016/10/17 16:45:00 [显示全部帖子]

蓝大师,根据您的代码,一级节点已经能够排序.
但是,为了排序所有节点,不知怎样修改Addchild这个内部函数,修改了半天也没修改好.
只好烦请蓝大师了.
(想直接上传附件,但是网页上传按钮不知为何不见了,无法上传.)



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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
  发帖心情 Post By:2016/10/17 18:05:00 [显示全部帖子]

蓝大师,要不明天贴出来(在办公室电脑上),我晚上在家里的电脑上再想想看.

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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
  发帖心情 Post By: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

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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
  发帖心情 Post By:2016/10/18 8:07:00 [显示全部帖子]

测试完全通过,这就是我想要的代码.
蓝大师,谢谢您了!

 回到顶部