Foxtable(狐表)用户栏目专家坐堂 → [求助]获取属性和控件类型


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

主题:[求助]获取属性和控件类型

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
[求助]获取属性和控件类型  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/6/21 16:27:00 [只看该作者]

老师‘
   能获其对应取值吗

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/6/28 13:44:00 [只看该作者]

老师,
   可以部分获得控件的值,好像有些属性不能获得,为什么呢?

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

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/6/28 14:07:00 [只看该作者]

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



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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/28 16:06:00 [只看该作者]

 无法生成的。表格只能保存字符,而控件的属性值,各种类型都有,无法还原的。

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