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


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

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

帅哥哟,离线,有人找我吗?
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
图片点击可在新窗口打开查看


 回到顶部
帅哥,在线噢!
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/10/17 7:43:00 [只看该作者]

BuildTree可以设置排序列的:

 回到顶部
帅哥哟,离线,有人找我吗?
hzcaqjf
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110572 积分:562750 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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



 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110572 积分:562750 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/17 16:49:00 [只看该作者]

贴出你的代码

 回到顶部
帅哥哟,离线,有人找我吗?
hzcaqjf
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110572 积分:562750 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/17 17:58:00 [只看该作者]

贴出你按4楼的方式改造后不能执行的代码

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
hzcaqjf
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 回到顶部
总数 13 1 2 下一页