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

标签 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

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

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

最佳答案

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

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

这是我的建议

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

在form的OnCreate中根据form的完整类型名查询该表,然后循环记录找到具体的Control,然后找到对应的Property 通过 Reflection 控制,然后反序列化该值并通过 Reflection 再次将值设置到 Property。

例如,我假设您已从数据库中设置了此变量

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,请查看此链接 Get a Windows Forms control by name in C#

希望对你有帮助

关于c# - 从代码文件动态设置控件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062207/

相关文章:

c# - 如何使用 VB.NET 代码关闭监视器

c# - 如何使用左侧带有 Type 的 IS 运算符?

c# - SSL 证书 : A specified logon session does not exist

vb.net 移动物体的更多性能

Windows 窗体应用程序作为计划任务

c# - .net tabcontrol 选项卡大小

c# - 在 C# 的 php(pcre) 中找到的分支重置运算符 ("?|"的等价物是什么?

mysql - 在测试数据库和生产数据库之间切换?

c# - 为 WinForms DataGridView 行设置背景色的最快方法

C#,System.Window.Controls 和 System.Windows.Forms 之间的区别?