以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]窗口多选目录树问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=135885) |
-- 作者:hanzhang98 -- 发布时间:2019/6/5 16:33:00 -- [求助]窗口多选目录树问题 老师好。想实现:1、启动窗口后,窗口多选目录树(不是下拉那种)根据窗口文本框的内容,自动显示节点勾选结果; 2、在勾选各层级节点后,即时将所勾选的节点名称写入窗口的文本框内。
代码运行出错[未找到类型“TreeView”的公共成员“Value”。]。勾选节点也不能即写入窗口文本框。请老师帮助修正代码。谢谢。 一、窗口的AfterLoad事件代码: Dim s As String = e.Form.Controls("TextBox5").Value \'设置文本框的值 Dim nms As new List(of String) Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") \'目录树 If s > "" Then \'如果文本框不为空 nms.AddRange(s.Split(",")) \'增加多个值并在值之间插入分隔符 End If For Each nd As WinForm.TreeNode In trv.AllNodes \'遍历目录树节点(所有层级) nd.Checked = nms.Contains(nd.text) \'选中节点复选框时,判断集合中是否包含其值 If nd.Checked Then s = s & "," & nd.Text End If Next trv.ExpandAll() 二、目录树AfterCheckNode事件代码: Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") Dim nd As WinForm.TreeNode = trv.SelectedNode \'选定的节点 \'Dim dr As DataRow If e.Node.ParentNode IsNot Nothing Then \'取消父节点的选中标记,因为选中子节点,就不要选中父节点了 e.Node.ParentNode.Checked = False End If For Each cnd As WinForm.TreeNode In e.Node.Nodes \'取消子节点的选中标记,因为选中父节点,就不要选中子节点了 cnd.Checked = False Next Dim nms As String For Each nd1 As WinForm.TreeNode In trv.AllNodes \'遍历目录树所有层级的子节点 If nd1.Checked Then nms = nms & "," & nd.Text End If Next e.Form.Controls("TextBox5").Value = nms.trim(",") \'将选定节点名称写入文本框 已修正 [此贴子已经被作者于2019/6/5 17:53:53编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/6/5 17:29:00 -- 红色的,应该是文本框名称吧?不是treeview控件的名称
e.Form.Controls("TreeView1_Page14").Value |
-- 作者:hanzhang98 -- 发布时间:2019/6/5 17:38:00 -- 谢谢老师,目录树名称,"TreeView1" 这一行应该是文本框的“e.Form.Controls("TextBox5").Value = nms.trim(",") 一楼已经修改。代码是从帮助示例中拼凑的,请老师费心修正。
[此贴子已经被作者于2019/6/5 17:44:26编辑过]
|
-- 作者:hanzhang98 -- 发布时间:2019/6/5 18:03:00 -- 谢谢老师。按老师的指正将目录树AfterCheckNode事件代码中的“e.Form.Controls("TreeView1_Page14").Value”修改为“e.Form.Controls("TextBox5").Value = nms.trim(",") ” 后能勾选了,但是文本框中的内容是重复的(不管是几级节点,勾选几个就在文本框中显示几个最后勾选的那个节点)。请老师帮助指正。谢谢。 [此贴子已经被作者于2019/6/5 18:02:54编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/6/5 18:10:00 -- nms = nms & "," & nd.Text
改成
nms = nms & "," & nd1.Text |
-- 作者:hanzhang98 -- 发布时间:2019/6/6 8:49:00 -- 老师好。按老师的指导,能勾选了,但还存在如下问题: 1、目录树不能随文本框中的内容变化而即时刷新改变节点勾选状态(即:文本框中有、目录树节点显示勾选;否则目录树不显示勾选); 2、如果在目录树取消最后一个勾选(即没有选择)时,报错“未将对象引用设置到对象的实例。”,并且最后一个节点名称还存在于文本框中; 请老师帮助修改(一楼)代码。谢谢。
[此贴子已经被作者于2019/6/6 9:07:27编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/6/6 9:11:00 --
请做一个具体事例发上来测试。
|
-- 作者:hanzhang98 -- 发布时间:2019/6/6 10:31:00 -- 老师好。实例如下。 [此贴子已经被作者于2019/6/6 21:52:02编辑过]
|
-- 作者:hanzhang98 -- 发布时间:2019/6/6 10:50:00 -- 老师好。还想实现如下功能。 1、当选择左边的用户名时,能判断该用户的“用户权限”文本框中具有那些权限,并即时在目录树相应节点中勾选显示; 2、目录树勾选须按“父-子”顺序勾选(即:选择了“父”,才能选择“子”),也就是有了“父权限”才能有“子权限”。取消目录树勾选时则按相反顺序,即取消全部“子权限”,才能取消“父权限”; 3、勾选“父权限”不能取消全部子权限,因为勾选了“父权限”并不意味着就能拥有“全部子权限”。相反,只要拥有一项“子权限”,即意味必定拥有“父权限”。 请老师帮助实现。谢谢。
|
-- 作者:有点甜 -- 发布时间:2019/6/6 11:42:00 -- 参考
http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=109942&skin=0
|