Foxtable(狐表)用户栏目专家坐堂 → [求助]属性窗口的全局代码


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

主题:[求助]属性窗口的全局代码

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/21 15:09:00 [显示全部帖子]

你想做什么?下面代码看懂了没有?

 

on error resume Next
Dim frm As WinForm.Form = e.Form
For Each c As object In frm.controls
    Dim dr3 As DataRow=DataTables("控件名称表").Find("控件名称='"& c.name &"'")
    If dr3 IsNot Nothing Then
        For Each o As object  In c.Gettype.getproperties
            Dim val = o.getvalue(c, Nothing)
            If val IsNot Nothing Then
                Dim dr As DataRow=DataTables("控件大小").find("控件名称='"& c.name &"' and 属性='"& o.name &"'")
                If dr IsNot Nothing Then
                    If dr("系统属性值")<>val.Tostring Then
                        dr("系统属性值")=(val.Tostring)
                    End If
                Else
                    Dim dr1 As DataRow=DataTables("控件大小").AddNew()
                    dr1("控件类型")=(c.Gettype.name)
                    dr1("控件名称")=(c.name )
                    dr1("属性")=(o.name)
                    dr1("系统属性值")=(val.Tostring)
                End If
            End If
        Next
    End If
Next

 

如果你像反向,根据表数据给控件赋值,那你就写setValue即可啊。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/21 15:28:00 [显示全部帖子]

照抄2楼代码,改成根据控件名、属性名在表格查找到对应的行,然后取值或赋值。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/21 15:45:00 [显示全部帖子]

以下是引用blsu33在2017/12/21 15:35:00的发言:
老师,
  2楼代码没问题,我要说的是 通过窗口1的 系统属性设置窗口去写表数据,全局代码没这么写过,怎么照抄啊?

 

如果是设置属性后触发事件,绑定PropertyValueChanged事件,参考

 

下载信息  [文件大小:340.0 KB  下载次数:2]
图片点击可在新窗口打开查看点击浏览该文件:属性查看.table

 

给表格赋值,可以在触发事件后查找修改。或者照抄你2楼的代码全部一次性修改


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/21 15:58:00 [显示全部帖子]

绑定 PropertyValueChanged 事件,绑定事件类似参考

 

http://www.foxtable.com/webhelp/scr/2374.htm

 

里面的代码直接写2楼代码即可。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/21 16:09:00 [显示全部帖子]

Public Shared Sub ToDataRow(ByVal entity As object, dt As DataTable)
Dim fs As System.Reflection.PropertyInfo() = entity.Gettype.GetProperties
Dim f As System.Reflection.PropertyInfo
For Each f In fs
    Dim dr As DataRow = dt.find("控件名称='" & entity.name & "' And 属性='" & f.name & "'")
    If dr Is Nothing Then
        dr = dt.addnew
        dr("控件名称") = entity.name
        dr("属性") = f.name
    End If
   
    Dim o As Object = f.GetValue(entity, Nothing)
    If (o Is Nothing) Then
        dr("系统属性值") = DBNull.Value
    Else
        dr("系统属性值") = o
    End If
Next
End Sub

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/21 17:07:00 [显示全部帖子]

你要调用代码才能触发执行啊,弄一个按钮,执行代码

 

ConvertHelper.ToDataRow(Forms("窗口1").Controls("CheckBox1").basecontrol, DataTables("控件大小"))


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/21 18:31:00 [显示全部帖子]

以下是引用blsu33在2017/12/21 17:24:00的发言:
老师,
  希望利用这个窗口 即时的看到 调整窗口中控件的结果  可是 感觉 好像离目标越走越远了呢
例如 利用属性panl 调整chek1 控件的大小 就会将属性值登录在表“控件大小”,同时反写了属性。

不知道是不是 偏差了 我没说明白 还是怎么的.


[此贴子已经被作者于2017/12/21 17:24:41编辑过]

 

修改属性窗口,马上触发事件你要绑定 PropertyValueChanged

 

下载信息  [文件大小:340.0 KB  下载次数:2]
图片点击可在新窗口打开查看点击浏览该文件:属性查看.table

 

修改表格,控件马上有变化,你就要去编写datacolchanged事件。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/24 20:58:00 [显示全部帖子]

在函数里面,加入msgbox,看是否执行了里面的代码,是否setvalue了。

 

属性值变化后,刷新一下属性窗口,如 refresh


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/24 21:02:00 [显示全部帖子]

弹出什么?

 

Public Shared Sub FromDataRow(ByVal dr As DataRow, ByRef entity As WeChat.EntityBase)
msgbox(1)
Dim fs As System.Reflection.PropertyInfo() = entity.Gettype.GetProperties
Dim f As System.Reflection.PropertyInfo
For Each f In fs
msgbox(2)
    If ((Not dr.DataTable Is Nothing) AndAlso dr.DataTable.DataCols.Contains(f.Name)) Then
msgbox(3)
        Dim o As Object = dr(f.Name)
        If (Not o Is DBNull.Value) Then
msgbox(4)
            f.SetValue(entity, o, Nothing)
        End If
    End If
Next
End Sub

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/24 21:22:00 [显示全部帖子]

以下是引用blsu33在2017/12/24 21:16:00的发言:
测试了下 什么也没有 明天上午我上个例子 劳烦您在给看下 

 

你肯定没有调用函数 FromDataRow


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