Foxtable(狐表)用户栏目专家坐堂 → 目录树级联多列多值输入可以实现吗?


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

主题:目录树级联多列多值输入可以实现吗?

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


加好友 发短信
等级:婴狐 帖子:3 积分:91 威望:0 精华:0 注册:2018/1/6 22:46:00
目录树级联多列多值输入可以实现吗?  发帖心情 Post By:2018/1/8 14:10:00 [只看该作者]

请教这个代码可以改成多列多值输入吗?

比如目录树第一级多值输入表第一列,第二级输入表第二列,


可以多选的下拉目录树

本节的任务是设计一个下图所示的下拉目录树,和之前的目录树不同,这个目录树可以选择多个值:


本节的内容可以参考CaseStudy目录下的文件:多选目录树.Table

实现方法很简单:

1、新建一个窗口,名为“窗口1”,窗口类型设置为“DropDownForm”。

2、窗口中插入一个TreeView(目录树)控件和一个Button(按钮),TreeView的"显示复选框"属性设置为True。

3、窗口的DropDownOpened事件设置为:

Dim s As String  = e.Form.DropDownBox.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)

Next

上述代码的目的在于每次打开下拉窗口的时候,都能自动勾选已经输入的项目。
注意这段代码不能设置在窗口的AfterLoad事件中,下拉窗口只有在第一次打开的时候,才会执行AfterLoad事件,而
DropDownOpened每次打开下拉窗口都会执行。

4、确定按钮的代码设置为:

Dim s As String
Dim
trv As WinForm.TreeView = e.Form.Controls("TreeView1")
For
Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Checked Then
       
s = s & "," & nd.Text
    End
If

Next

e
.Form.DropDownBox.Value = s.trim(",")
e
.Form.DropDownBox.CloseDropdown

5、最后将项目事件AfterOpenProject的代码设置为:

Tables(
"表A").Cols("第一列").DropForm  = "窗口"


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/8 14:35:00 [只看该作者]

 

[此贴子已经被作者于2018/1/8 14:34:38编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/8 14:36:00 [只看该作者]

确定按钮的代码设置为:

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim s1 As String = ""
Dim s2 As String = ""

For Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Checked Then
        If nd.Level = 0
            s1 = s1 & "," & nd.Text
        ElseIf nd.Level = 1
            s2 = s2 & "," & nd.Text
        End If
    End If
   
Next
e.Form.DropDownBox.Value = s1.trim(",")
e.Form.DropTable.current("第一列") = s1.trim(",")
e.Form.DropTable.current("第二列") = s2.trim(",")
e.Form.DropDownBox.CloseDropdown


 


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


加好友 发短信
等级:婴狐 帖子:3 积分:91 威望:0 精华:0 注册:2018/1/6 22:46:00
  发帖心情 Post By:2018/1/8 22:30:00 [只看该作者]

谢谢老师,果然管用,非常感谢!也能否扩展三列,四列。只是第二、三、四列没有记忆,也就是打开下拉窗口的时候,第一列都能自动勾选已经输入的项目。其他列没有自动勾选已经输入的项目。如果其他列都能记忆勾选项目,就更好了!不知老师能否帮忙给个代码?!

窗口的DropDownOpened事件设置为:

Dim s As String  = e.Form.DropDownBox.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)

Next

上述代码的目的在于每次打开下拉窗口的时候,都能自动勾选已经输入的项目。


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


加好友 发短信
等级:超级版主 帖子:110581 积分:562801 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/1/8 22:41:00 [只看该作者]

Dim s As String  = e.Form.DropDownBox.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
s  = e.Form.DropTable.current("第二列")
If s > "" Then
    nms.AddRange(s.Split(","))
End If
For Each nd As WinForm.TreeNode In trv.AllNodes
    nd.Checked = nms.Contains(nd.text)
Next

 回到顶部