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

时间:2015-01-21 08:00:40

标签: c# vb.net winforms windows-forms-designer

我在表单中有几个文本框。我写了很多代码并将它们存储在数据库中:

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

在数据库中编写代码的原因是,如果用户想要在特定位置使用文本框或想要更改文本框的任何属性,我们的程序员将更改该文本框的数据库中的代码,而不是重新编译软件。

有没有办法从数据库执行这些代码来相应地更改文本框的属性?

1 个答案:

答案 0 :(得分:1)

您需要序列化(xml或二进制)并将值存储到数据库,然后在表单的OnCreate事件处理程序中读取数据库中的值并使用Reflection相应地设置它们。

让我们看一下数据库表的结构

这是我的建议

Create table FormData
(ID int,
FormFullTypeName varchar(500),
ControlName varchar(500),
PropertyName varchar(100),
Value varchar(max))

在表单的OnCreate中根据表单的完整类型名称查询此表,然后遍历记录并找到特定的Control,然后通过{{1}查找对应的Property然后反序列化该值,并通过Reflection再次将值设置为Property。

例如,我假设您已从db

设置此变量
Reflection

实现findControlByName看看这个链接 Get a Windows Forms control by name in C#

我希望这有助于你