以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]属性窗口的全局代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=111413)

--  作者:blsu33
--  发布时间:2017/12/21 14:34:00
--  [求助]属性窗口的全局代码
老师,
   原来您给的例子,是属性在列取得;
属性太多,列放不下,
希望窗口中设定属性能相应的更表同时跟改设置,全局变量代码怎么改成根据行取得和赋值呢,烦您在给弄下(暂时忽略某些属性不能取值的错误)。


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

--  作者:有点甜
--  发布时间: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
--  发布时间: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

--  作者:有点甜
--  发布时间:2017/12/21 15:28:00
--  
照抄2楼代码,改成根据控件名、属性名在表格查找到对应的行,然后取值或赋值。
--  作者:blsu33
--  发布时间:2017/12/21 15:35:00
--  
老师,
  2楼代码没问题,我要说的是 通过窗口1的 系统属性设置窗口去写表数据,全局代码没这么写过,怎么照抄啊?

--  作者:blsu33
--  发布时间:2017/12/21 15:44:00
--  
是这个,忽略1楼的例子
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件: 控件位置大小.foxdb

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

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

 

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

 

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

 

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


--  作者:blsu33
--  发布时间:2017/12/21 15:50:00
--  
老师,
  楼上的例子绑定的部分不会啊6楼就是想要的,就是全局代码不会写,望您给在看看6楼的例子。

--  作者:blsu33
--  发布时间: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

--  作者:有点甜
--  发布时间:2017/12/21 15:58:00
--  

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

 

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

 

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