65.9K
CodeProject 正在变化。 阅读更多。
Home

用于控件组着色的控件

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (4投票s)

2006年12月18日

CPOL

2分钟阅读

viewsIcon

29169

downloadIcon

289

一个用于批量更改其他控件属性的控件。

Sample screenshot

引言

您可能会问,什么是样式控件? 样式控件是一种可以快速更改许多其他控件属性的控件。 例如,在应用程序中,您希望能够拥有绿色配色方案、蓝色配色方案等。 通过使用此控件,您可以指定属性(按名称或内置)以及要将属性设置为的值。 快速、简单且节省大量代码。 以下是如何实现...

工作原理

这段代码是如何工作的。 它实际上很简单。 其中包含一些用于更改一些常见属性的方法,例如 NameBackcolorForecolor 等。 除了这些,您还可以指定只想更改某些类型的控件,例如仅更改类型为 Button 的控件的 Forecolor。 但是,如果您想更改自定义控件的属性怎么办? 或者一个未提供的属性呢? 这就是反射发挥作用的地方。

在运行时,我不知道给定的对象的类型。 因此,我必须使用反射来获取它,如下所示

Dim objType As Type = ctrl.GetType()

这将创建一个对象 objTypeobjType 的类型是控件 ctrl 的类型。 然后,我们可以根据其名称获取所需的属性。

Dim propInfo As PropertyInfo = objType.GetProperty(PropertyName)

这将获取该对象的 PropertyInfo。 通过传入要更改的属性的名称,我们可以获取或设置该属性。 最后一步是更改属性。

propInfo.SetValue(ctrl, val, Nothing)

ctrl 是我们要更改其属性的控件。 val 是新值。 在数组的情况下,使用 Nothingnull)作为索引。 我只是临时编写的,所以没有添加更改此功能。 如果有足够的需求,我可以添加。

但是,等等,有一个陷阱...

为了更改控件的属性,必须将控件按引用 (ByRef) 传递给样式控件。 这意味着样式控件仍然持有引用,因此无法对控件进行垃圾回收。 调用 RemoveControl 方法将删除对控件的引用。 就这样了。 希望这能教您一些关于反射的知识。

© . All rights reserved.