以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]获取属性和控件类型  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=102509)

--  作者:blsu33
--  发布时间:2017/6/21 15:17:00
--  [求助]获取属性和控件类型
老师,
怎么获取这些设置呢
Dim o = e.Form
DataTables("表B").DataRows.Clear
For Each c As object  In o.Gettype.getproperties
    Dim dr As DataRow=DataTables("表B").AddNew()
    DR("控件名")=c.‘这块怎么写能导出控件名
    DR("类型")=c.‘这块怎么写能导出控件类型
    DR("属性")=c.name
Next
[此贴子已经被作者于2017/6/21 15:20:29编辑过]

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

 导出窗口所有控件的所有属性?

 

Dim frm As WinForm.Form = Forms("窗口1")
For Each c As object In frm.controls
    For Each o As object  In c.Gettype.getproperties
        output.show(c.name & " " & c.Gettype.name & " " & o.name)
    Next
Next


--  作者:blsu33
--  发布时间:2017/6/21 16:27:00
--  
老师‘
   能获其对应取值吗

--  作者:有点色
--  发布时间:2017/6/21 16:37:00
--  
Dim frm As WinForm.Form = Forms("窗口1")
For Each c As object In frm.controls
    For Each o As object  In c.Gettype.getproperties
        Dim val = o.getvalue(c, Nothing)
        If val Is Nothing Then
            output.show(c.name & " " & c.Gettype.name & " " & o.name)
        Else
            output.show(c.name & " " & c.Gettype.name & " " & o.name & " " & val.Tostring)
        End If
    Next
Next

--  作者:blsu33
--  发布时间:2017/6/28 13:44:00
--  
老师,
   可以部分获得控件的值,好像有些属性不能获得,为什么呢?

.NET Framework 版本:2.0.50727.3053
Foxtable 版本:2017.6.12.1
错误所在事件:窗口,窗口1,Button2,Click
详细错误信息:
未找到 Property Get 方法。
  能否取得值后,在根据表直接生成窗口呢,代码怎么写呢。

--  作者:blsu33
--  发布时间:2017/6/28 14:06:00
--  
批量生成代码
\'Dim kjmcs As List(Of String)=DataTables("表B").GetValues("控件名称")
\'For Each kjmc As String In kjmcs
    \'Dim dr2 As DataRow=DataTables("表B").Find("控件名称=\'" & kjmc &"\'")
    \'Dim drs As List(Of DataRow)=DataTables("表B").Select("控件名称=\'" & kjmc &"\'")
    \'If DR2 IsNot Nothing  Then
        \'If DRS IsNot Nothing Then
            \'Dim STR As String="WinForm." & dr2("控件类型")
            \'Dim STR2 As String="ControlTypeEnum." & dr2("控件类型")
            \'Dim TJKJ As STR =E.Form.CreateControl(dr("控件名称"),str2)\'这块有问题
            \'For Each dr As DataRow In DRS
                \'TJKJ & "." & dr("属性")=dr("属性值")
            \'Next
            \'e.Form.AddControl(TJKJ)
        \'End If
    \'End If
\'Next

--  作者:blsu33
--  发布时间:2017/6/28 14:07:00
--  
例子如下:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动生成成控件.foxdb



--  作者:有点色
--  发布时间:2017/6/28 15:05:00
--  

生成

 

on error resume Next
DataTables("表B").DataRows.Clear
Dim frm As WinForm.Form = e.Form
For Each c As object In frm.controls
    For Each o As object  In c.Gettype.getproperties
        Dim dr As DataRow=DataTables("表B").AddNew()
        Dim val = o.getvalue(c, Nothing)
        If val Is Nothing Then
            dr("控件类型")=(c.Gettype.name)
            dr("控件名称")=(c.name )
            dr("属性")=(o.name)
        Else
            dr("控件类型")=(c.Gettype.name)
            dr("控件名称")=(c.name )
            dr("属性")=(o.name)
            dr("属性值")=(val.Tostring)
        End If
    Next
Next

 

无法通过获取的属性重新生成窗口的,布局不知道,层级不知道,属性值也不确定。


--  作者:blsu33
--  发布时间:2017/6/28 15:28:00
--  
老师,
   只有一层(全部填满窗口),且没有层级(窗口中只有一个控件),用8楼代码生成属性值,用六楼怎么改能生成呢?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:一层自动生成成控件.foxdb


修改6楼代买,下面问题多,劳烦老师给改改
Dim Code As String
Code = Code & "Dim drs As List(Of DataRow)=DataTables(""表B"").Select(""控件名称=\'Table1\'"") & vbcrlf
Code = Code & "Dim TJKJ As ""WinForm."" & dr2(""控件类型"")=E.Form.CreateControl(dr(""控件名称""),ControlTypeEnum." & dr2(""控件类型""))" & vbcrlf
Code = Code & "For Each dr As DataRow In DRS" & vbcrlf
Code = Code & "TJKJ & dr2(""控件类型"")"& "".""  & dr(""属性"")=dr(""属性值"")" & vbcrlf
Code = Code & "Next" & vbcrlf
Code = Code & "e.Form.AddControl(TJKJ)" & vbcrlf
Functions.Add("thkj",Code)
Functions.Complie()

[此贴子已经被作者于2017/6/28 16:02:18编辑过]

--  作者:有点色
--  发布时间:2017/6/28 16:06:00
--  
 无法生成的。表格只能保存字符,而控件的属性值,各种类型都有,无法还原的。