从代码文件动态设置控件的 属性

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然后找到对应的PropertyReflection 控制,然后反序列化该值并通过 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#

希望对您有所帮助