以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]遍历窗口控件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=95278)

--  作者:苏州老街
--  发布时间:2017/1/15 9:21:00
--  [求助]遍历窗口控件
老师,我希望在窗口1中的目录树遍历所有窗口和窗口控件后赋值给窗口表
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:集合窗口控件.table



--  作者:有点色
--  发布时间:2017/1/15 11:26:00
--  

内部函数

 

Dim tv As WinForm.TreeView = Args(0)

tv.Nodes.Clear

Dim nd As WinForm.TreeNode
Dim name As String
Dim sname() As String

For Each f As WinForm.Form In Forms
    name = f.Category
    sname = name.Split("\\")
    Dim frmnd As WinForm.TreeNode
    If sname.Length = 1 AndAlso sname(0) = "" Then
        frmnd = tv.Nodes.Add(f.name)
    Else
        If tv.Nodes.Contains(sname(0)) = False Then
            nd = tv.Nodes.Add(sname(0))
        Else
            nd = tv.Nodes(sname(0))
        End If
        For i As Integer = 1 To sname.Length - 1
            If nd.Nodes.Contains(sname(i)) = False Then
                nd = nd.Nodes.Add(sname(i))
            Else
                nd = nd.Nodes(sname(i))
            End If
        Next
        frmnd = nd.Nodes.Add(f.name)
    End If
    Dim opened = f.Opened
    f.Open
    For Each c As object In f.controls
        frmnd.Nodes.Add(c.name)
    Next
    If opened = False Then f.Close
Next


--  作者:苏州老街
--  发布时间:2017/1/15 11:46:00
--  
谢谢老师,控件边上能显示该控件的标题吗?
--  作者:有点色
--  发布时间:2017/1/15 12:00:00
--  
以下是引用苏州老街在2017/1/15 11:46:00的发言:
谢谢老师,控件边上能显示该控件的标题吗?

 

请回头,把foxtable的帮助文档重新看一遍。

 

Dim tv As WinForm.TreeView = Args(0)

tv.Nodes.Clear

Dim nd As WinForm.TreeNode
Dim name As String
Dim sname() As String

For Each f As WinForm.Form In Forms
    name = f.Category
    sname = name.Split("\\")
    Dim frmnd As WinForm.TreeNode
    If sname.Length = 1 AndAlso sname(0) = "" Then
        frmnd = tv.Nodes.Add(f.name)
    Else
        If tv.Nodes.Contains(sname(0)) = False Then
            nd = tv.Nodes.Add(sname(0))
        Else
            nd = tv.Nodes(sname(0))
        End If
        For i As Integer = 1 To sname.Length - 1
            If nd.Nodes.Contains(sname(i)) = False Then
                nd = nd.Nodes.Add(sname(i))
            Else
                nd = nd.Nodes(sname(i))
            End If
        Next
        frmnd = nd.Nodes.Add(f.name)
    End If
    Dim opened = f.Opened
    f.Open
    For Each c As object In f.controls
        try
            frmnd.Nodes.Add(c.name, c.name & " | " & c.Text)
        catch ex As exception
            frmnd.Nodes.Add(c.name)
        End try
    Next
    If opened = False Then f.Close
Next


--  作者:苏州老街
--  发布时间:2017/1/15 13:35:00
--  
老师,在遍历控件时能否让窗口不打开或很快。
--  作者:有点色
--  发布时间:2017/1/15 14:20:00
--  
以下是引用苏州老街在2017/1/15 13:35:00的发言:
老师,在遍历控件时能否让窗口不打开或很快。

 

必须打开窗口,才能获取控件。

 

你可以在你开发结束以后,再执行一次代码,把所有的数据,存放到一个表格里面,以后根据表格数据生成目录树。


--  作者:苏州老街
--  发布时间:2017/1/15 14:44:00
--  
老师,是把所有的控件赋值给表格,控件生成的目录树赋值不了授权表啊,老师有要烦你了。
--  作者:有点色
--  发布时间:2017/1/15 14:46:00
--  
以下是引用苏州老街在2017/1/15 14:44:00的发言:
老师,是把所有的控件赋值给表格,控件生成的目录树赋值不了授权表啊,老师有要烦你了。

 

参考表的目录树的代码。

 

不会做,请重新看视频教程 http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=67187

 


--  作者:苏州老街
--  发布时间:2017/1/15 17:17:00
--  
老师,我明年慢慢学,这次麻烦老师帮忙。谢谢,
--  作者:有点色
--  发布时间:2017/1/15 17:31:00
--  

If e.Node.Level = 0 Then
    Tables("授权表").current("窗口名") = e.Node.Name
ElseIf e.Node.Level >= 1 Then
    Tables("授权表").current("窗口名") = e.Node.ParentNode.Name
    Tables("授权表").current("控件名") = e.Node.Name
End If