从代码文件动态设置控件的 属性
set property of a control dynamically from a code file
我在一个表单中有多个文本框。我写了很多代码并将它们存储在数据库中 As:
Textbox1.Location = New System.Drawing.Point(609, 3)
Textbox2.Location = New System.Drawing.Point(659, 3)
Textbox1.BackColor = System.Drawing.Color.Green
Textbox2.BackColor = System.Drawing.Color.Blue
TextboxX.AnyProperty = PropertyValue
在数据库中编写代码的原因是,如果用户想要特定位置的文本框或想要更改文本框的任何 属性,我们的程序员会为该文本框更改数据库中的代码,而不是重新编译软件.
有没有办法从数据库中执行这些代码来相应地更改文本框的属性?
您需要序列化(xml 或二进制)并将值存储到数据库,然后在表单的 OnCreate 事件处理程序中从数据库读取值并使用 Reflection
相应地设置它们。
让我们看看数据库的结构table
这是我的建议
Create table FormData
(ID int,
FormFullTypeName varchar(500),
ControlName varchar(500),
PropertyName varchar(100),
Value varchar(max))
在表单的OnCreate
中根据表单的全类型名称查询这个table然后循环遍历记录找到具体的Control
然后找到对应的Property
由 Reflection
控制,然后反序列化该值并通过 Reflection
.
再次将值设置为 属性
例如,我假设您已经从数据库中设置了这个变量
var controlName = 'yourcontrolName from db';
var propertyName = 'your property name from db';
object value = //the deserialized value from db;
var control = findControlByName(controlName);
control.GetType().GetProperty(propertyName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(control, value, new object[] { });
要实现 findControlByName,请查看此 link
Get a Windows Forms control by name in C#
希望对您有所帮助
我在一个表单中有多个文本框。我写了很多代码并将它们存储在数据库中 As:
Textbox1.Location = New System.Drawing.Point(609, 3)
Textbox2.Location = New System.Drawing.Point(659, 3)
Textbox1.BackColor = System.Drawing.Color.Green
Textbox2.BackColor = System.Drawing.Color.Blue
TextboxX.AnyProperty = PropertyValue
在数据库中编写代码的原因是,如果用户想要特定位置的文本框或想要更改文本框的任何 属性,我们的程序员会为该文本框更改数据库中的代码,而不是重新编译软件.
有没有办法从数据库中执行这些代码来相应地更改文本框的属性?
您需要序列化(xml 或二进制)并将值存储到数据库,然后在表单的 OnCreate 事件处理程序中从数据库读取值并使用 Reflection
相应地设置它们。
让我们看看数据库的结构table
这是我的建议
Create table FormData
(ID int,
FormFullTypeName varchar(500),
ControlName varchar(500),
PropertyName varchar(100),
Value varchar(max))
在表单的OnCreate
中根据表单的全类型名称查询这个table然后循环遍历记录找到具体的Control
然后找到对应的Property
由 Reflection
控制,然后反序列化该值并通过 Reflection
.
例如,我假设您已经从数据库中设置了这个变量
var controlName = 'yourcontrolName from db';
var propertyName = 'your property name from db';
object value = //the deserialized value from db;
var control = findControlByName(controlName);
control.GetType().GetProperty(propertyName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(control, value, new object[] { });
要实现 findControlByName,请查看此 link Get a Windows Forms control by name in C#
希望对您有所帮助