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


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

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

帅哥哟,离线,有人找我吗?
有点色
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 

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


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


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

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

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/28 16:34:00 [显示全部帖子]

不是这个意思。你存放的属性值,是字符,是无法还原成对象的。

 

比如,Font属性,存放的是 宋体,9号;Image属性,存放的可能就是一串乱码。无法直接还原为对象赋值的。


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/28 17:50:00 [显示全部帖子]

参考代码

 

Dim lx As String = "TextBox"
Dim name As String = "test"
Dim sxm1 As String = "text"
Dim sxz1 As String = "abcdefg"
Dim code As String = ""
code &= "dim frm = args(0)" & vbcrlf
code &= "dim txt = frm.CreateControl(""" & name & """, ControlTypeEnum." & lx & ")" & vbcrlf
code &= "txt." & sxm1 & " = """ & sxz1 & """" & vbcrlf
code &= "frm.AddControl(txt)"

msgbox(code)

Functions.remove("test")
Functions.Add("test",Code)
Functions.Complie()
Functions.Execute("test", e.form)


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/29 11:35:00 [显示全部帖子]

正常代码这样写,但是,依然不能还原的啊。比如 TextAlign 属性,你不能设置成字符,还有 backColor 之类的的,全部都需要特殊处理。

 

Dim dr1 As DataRow=DataTables("表B").DataRows(0)
Dim lx As String = dr1("控件类型")
Dim name As String = dr1("控件名称")

Dim code As String = ""
code &= "dim frm = args(0)" & vbcrlf
code &= "dim txt = frm.CreateControl(""" & name & """, ControlTypeEnum." & lx & ")" & vbcrlf
For Each dr As DataRow In DataTables("表B").DataRows
    code &= "txt." & dr("属性") & "=""" & dr("属性值") & """" & vbcrlf
Next

code &= "frm.AddControl(txt)"
msgbox(code)


 回到顶部