VS2008下的VB.NET
我创建了一个具有Designer属性的组件:
<Designer(GetType(MyComponentDesigner))> _
Public Class MyComponent
(etc....)
据我了解,MyComponentDesigner的实例将与MyComponent的每个实例一起创建。这是对的吗?
如果是这样,MyComponentDesigner的每个实例都需要引用“它的”MyComponent。怎么样?
(澄清一下:Designer所做的一件事是实现RMB“动词”。当MyComponent用户点击该动词时,处理程序需要调用用户右键单击以查看动词的MyComponent的特定实例。 )
任何指导意见。
答案 0 :(得分:0)
由于用户(开发者)一次只能编辑一个组件,因此每次只能有一个主动进行交互。此外,“设计师”是一个广义的术语,因为有很多设计师类型,所以部分答案是“它取决于”。
当您的设计人员需要对正在编辑的组件的引用时,NET会传递对它的引用。例如,对于SmartTags(继承DesignerActionList
),构造函数是:
Sub New(ByVal component As IComponent)
MyBase.New(component)
m_Control = CType(component, myControl)
End Sub
其他UIEditors(如集合编辑器)的构造函数,你在构造函数中没有得到引用,因为你还不需要它。他们可能会在以后传递组件/上下文:
Protected Overrides Sub LoadValues(ByVal context _
As ITypeDescriptorContext, _
ByVal provider As System.IServiceProvider, ByVal value As Object)
何时以及如何获得对组件的引用取决于设计器将继承的基本编辑器类型。
答案 1 :(得分:0)
谢谢大家。
我发现了MyComponentDesigner的Component属性,我可以将其转换为MyComponent以获取我需要的引用。