- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我已经为此奋斗了几天,我已经束手无策了……我正在尝试通过扩展控件来添加一个在运行时在 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
然后我构建第二个项目,返回到第一个项目,但我的属性窗口中没有任何内容,我在代码中实例化一个控件,然后尝试找到我的“Count”属性,但那里什么也没有。关于可能出现的问题有什么建议吗?
最佳答案
阅读答案之前
确保你知道:
扩展程序提供程序是为其他组件提供属性的组件。扩展器提供者提供的属性实际上驻留在扩展器提供者对象本身中,因此不是它修改的组件的真实属性。
在设计时属性出现在属性窗口中。
但是,在运行时,您无法通过组件本身访问该属性。相反,您可以在扩展程序组件上调用 getter 和 setter 方法。
实现扩展器提供程序
Component
并实现 IExtenderProvider
界面。ProvideProperty
装饰你的组件类属性并引入提供的属性和目标控件类型。CanExtend
时方法,为您要为其提供属性的每个控件类型返回 true。了解更多
示例
使用下面的代码你可以实现一个扩展组件ControlExtender
。当您构建代码并将 ControlExtender
的实例放在表单上时,它会扩展所有控件并为属性网格中的控件添加 SomeProperty on ControlExtender1
属性。
Component
,并命名为ControlExtender
ControlExtender.vb
中使用这些代码Imports System.ComponentModel
Imports System.Windows.Forms
<ProvideProperty("SomeProperty", GetType(Control))>
Public Class ControlExtender
Inherits Component
Implements IExtenderProvider
Private controls As New Hashtable
Public Function CanExtend(extendee As Object) As Boolean Implements IExtenderProvider.CanExtend
Return TypeOf extendee Is Control
End Function
Public Function GetSomeProperty(control As Control) As String
If controls.ContainsKey(control) Then
Return DirectCast(controls(control), String)
End If
Return Nothing
End Function
Public Sub SetSomeProperty(control As Control, value As String)
If (String.IsNullOrEmpty(value)) Then
controls.Remove(control)
Else
controls(control) = value
End If
End Sub
End Class
注意:您也可以根据需要继承Control
。但在大多数情况下,继承 Component
更有意义。
关于VB.Net 扩展对象 IExtenderProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802459/
我遇到了一个问题,我不知道这是否确实可行(如果有一种“hacky”方式,我全力以赴,但我还没有找到)。 我有一个 IExtenderProvider 组件,我用它来拥有自己的 UITypeEditor
好吧,我已经为此奋斗了几天,我已经束手无策了……我正在尝试通过扩展控件来添加一个在运行时在 PropertyGrid 中可见的可浏览属性。无论我做什么,iExtenderProvider 似乎都没有实
我有一个扩展器(IExtenderProvider),它扩展了某些类型的 具有附加属性的控件。对于这些属性之一,我有 写了一个 UITypeEditor。到目前为止,一切正常。 扩展器本身也有几个属性
我正在尝试使用 IExtenderProvider 扩展 TextBox、ComboBox 和 Panel 控件,但我无法获取它才能正常工作。我开始相信我还没有完全理解这个概念。 有人知道网络上关于如
我是一名优秀的程序员,十分优秀!