好吧,我一直在争取这几天,我在我的智慧结束......我试图添加一个可浏览的属性,在PropertyGrid中可见的运行时通过扩展控制。无论我做什么,iExtenderProvider都不会真正运行。VB.Net扩展对象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 – Plutonix
为了阐明,ExtenderProvider用于在设计时在VS中添加属性。它们不是真正的属性(请参阅添加工具提示文本的语法)。对于运行时你需要一个'TypeConverter'和一个自定义的'PropertyDescriptor'。这些是很多样板代码,对于RO属性看起来像很多工作。 – Plutonix
只是一个起点......最终的结果是在集成中能够在PropertyGrid中访问一个伪名,以便用户可以在运行时“更改控制名”。 –