用于控件组着色的控件
一个用于批量更改其他控件属性的控件。
引言
您可能会问,什么是样式控件? 样式控件是一种可以快速更改许多其他控件属性的控件。 例如,在应用程序中,您希望能够拥有绿色配色方案、蓝色配色方案等。 通过使用此控件,您可以指定属性(按名称或内置)以及要将属性设置为的值。 快速、简单且节省大量代码。 以下是如何实现...
工作原理
这段代码是如何工作的。 它实际上很简单。 其中包含一些用于更改一些常见属性的方法,例如 Name
、Backcolor
、Forecolor
等。 除了这些,您还可以指定只想更改某些类型的控件,例如仅更改类型为 Button
的控件的 Forecolor
。 但是,如果您想更改自定义控件的属性怎么办? 或者一个未提供的属性呢? 这就是反射发挥作用的地方。
在运行时,我不知道给定的对象的类型。 因此,我必须使用反射来获取它,如下所示
Dim objType As Type = ctrl.GetType()
这将创建一个对象 objType
。 objType
的类型是控件 ctrl
的类型。 然后,我们可以根据其名称获取所需的属性。
Dim propInfo As PropertyInfo = objType.GetProperty(PropertyName)
这将获取该对象的 PropertyInfo
。 通过传入要更改的属性的名称,我们可以获取或设置该属性。 最后一步是更改属性。
propInfo.SetValue(ctrl, val, Nothing)
ctrl
是我们要更改其属性的控件。 val
是新值。 在数组的情况下,使用 Nothing
(null
)作为索引。 我只是临时编写的,所以没有添加更改此功能。 如果有足够的需求,我可以添加。
但是,等等,有一个陷阱...
为了更改控件的属性,必须将控件按引用 (ByRef
) 传递给样式控件。 这意味着样式控件仍然持有引用,因此无法对控件进行垃圾回收。 调用 RemoveControl
方法将删除对控件的引用。 就这样了。 希望这能教您一些关于反射的知识。