【发布时间】:2016-01-15 00:39:19
【问题描述】:
好的,我已经为此奋斗了几天,但我束手无策...我正在尝试通过扩展控件来添加一个在运行时在 PropertyGrid 中可见的可浏览属性。无论我做什么,iExtenderProvider 似乎都没有实际运行。
iExtenderProvider 位于第二个项目中,并在主项目中添加了一个引用。 (代码如下)
Imports System.ComponentModel
Imports System.Windows.Forms
Public Class ControlArray
Inherits Component
Implements IExtenderProvider
<Browsable(True)> Public ReadOnly Property Count As Integer
Get
Return 0
End Get
End Property
Public Function CanExtend(ByVal extendee As Object) As Boolean Implements IExtenderProvider.CanExtend
Return TypeOf extendee Is Control
End Function
End Class
然后我构建第二个项目,返回第一个项目,我的属性窗口中没有任何内容,我在代码中实例化一个控件,然后尝试找到我的“计数”属性,但那里没有任何内容。关于可能是什么问题的任何建议?
【问题讨论】:
-
这并不是实现
IExtenderProvider的正确方法——缺少一些东西。IExtenderProvider与 VS IDE 配合得很好,但它不适用于 PropertyGrid,因为它使用反射来获取属性 - 你需要一个 TypeConverter -
为了澄清,ExtenderProvider 用于在设计时在 VS 中添加属性。它们不是真正的属性(请参阅添加工具提示文本的语法)。对于运行时,您需要一个
TypeConverter和一个自定义PropertyDescriptor。这些是很多样板代码,对于 RO 属性来说似乎需要做很多工作。 -
只是一个起点......最终结果将是集成,以便能够将伪名称访问到 PropertyGrid 中,以便用户可以在期间“更改控件名称”运行时。
标签: vb.net winforms iextenderprovider