左栏'); } else{ document.write('关闭左栏'); } }catch(e){alert(e);}
Foxtable(狐表)用户栏目专家坐堂 → [求助]属性窗口的全局代码


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

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

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
[求助]属性窗口的全局代码  发帖心情 Post By:2017/12/21 14:34:00 [只看该作者]

老师,
   原来您给的例子,是属性在列取得;
属性太多,列放不下,
希望窗口中设定属性能相应的更表同时跟改设置,全局变量代码怎么改成根据行取得和赋值呢,烦您在给弄下(暂时忽略某些属性不能取值的错误)。


[此贴子已经被作者于2017/12/21 15:43:45编辑过]

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


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


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

楼上代码是我写 我 指的是全局代码怎么改 点击窗口 CHECK1  控件  在PANL1设定属性 后更改表 控件大小中的属性数据 ;同时 PANL1设定属性从表 控件大小 的属性数据反写控件的属性

也就是 下面标注颜色部分 能变成根据行取值 (原来是列)

'实体对象和DataRow的互相赋值
'根据相同名称的属性和列名进行操作
Public Class ConvertHelper

'把DataRow值赋值到对象的实体对象
Public Shared Sub FromDataRow(ByVal dr As DataRow, ByRef entity As WeChat.EntityBase)
Dim fs As System.Reflection.PropertyInfo() = entity.Gettype.GetProperties
Dim f As System.Reflection.PropertyInfo
For Each f In fs
    If ((Not dr.DataTable Is Nothing) AndAlso dr.DataTable.DataCols.Contains(f.Name)) Then
        Dim o As Object = dr(f.Name)
        If (Not o Is DBNull.Value) Then
            f.SetValue(entity, o, Nothing)
        End If
    End If
Next
End Sub

' 把实体值赋值到DataRow
Public Shared Sub ToDataRow(ByVal entity As WeChat.EntityBase, ByRef dr As DataRow)
Dim fs As System.Reflection.PropertyInfo() = entity.Gettype.GetProperties
Dim f As System.Reflection.PropertyInfo
For Each f In fs
    If ((Not dr.DataTable Is Nothing) AndAlso dr.DataTable.DataCols.Contains(f.Name)) Then
        Dim o As Object = f.GetValue(entity, Nothing)
        If (o Is Nothing) Then
            dr(f.Name) = DBNull.Value
        Else
            dr(f.Name) = o
        End If
    End If
Next
End Sub

End class

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


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

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

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


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

老师,
  2楼代码没问题,我要说的是 通过窗口1的 系统属性设置窗口去写表数据,全局代码没这么写过,怎么照抄啊?

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


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

是这个,忽略1楼的例子
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件: 控件位置大小.foxdb

[此贴子已经被作者于2017/12/21 16:19:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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楼的代码全部一次性修改


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


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

老师,
  楼上的例子绑定的部分不会啊6楼就是想要的,就是全局代码不会写,望您给在看看6楼的例子。

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


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

这块怎么写呢

'实体对象和DataRow的互相赋值
'根据相同名称的属性和列名进行操作
Public Class ConvertHelper

'把DataRow值赋值到对象的实体对象
Public Shared Sub FromDataRow(ByVal dr As DataRow, ByRef entity As WeChat.EntityBase)
Dim fs As System.Reflection.PropertyInfo() = entity.Gettype.GetProperties
Dim f As System.Reflection.PropertyInfo
For Each f In fs
    If ((Not dr.DataTable Is Nothing) AndAlso dr.DataTable.DataRows.find("控件名称="'& f.Name &"' and 属性='"& ???? &") Then
        Dim o As Object = dr(f.Name)
        If (Not o Is DBNull.Value) Then
            f.SetValue(entity, o, Nothing)
        End If
    End If
Next
End Sub

' 把实体值赋值到DataRow
Public Shared Sub ToDataRow(ByVal entity As WeChat.EntityBase, ByRef dr As DataRow)
Dim fs As System.Reflection.PropertyInfo() = entity.Gettype.GetProperties
Dim f As System.Reflection.PropertyInfo
For Each f In fs
    If ((Not dr.DataTable Is Nothing) AndAlso dr.DataTable.DataRows.find("控件名称="'& f.Name &"' and 属性='"& ???? &") Then
        Dim o As Object = f.GetValue(entity, Nothing)
        If (o Is Nothing) Then
            dr(f.Name) = DBNull.Value
        Else
            dr(f.Name) = o
        End If
    End If
Next
End Sub

End class

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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楼代码即可。


 回到顶部
总数 29 1 2 3 下一页