2013-11-17 4 views
0

VB.NET под VS2008Связанные экземпляры конструктора и компонента?

Я создал компонент с атрибутом Designer:

<Designer(GetType(MyComponentDesigner))> _ 
Public Class MyComponent 
    (etc....) 

Это мое понимание того, что экземпляр MyComponentDesigner будет создан вместе с каждым экземпляром MyComponent. Это правильно?

Если это так, каждый экземпляр MyComponentDesigner должен ссылаться на «его» MyComponent. Как?

(Чтобы уточнить: одна вещь, которую выполняет Дизайнер, - это реализовать «глагол» юаня. Когда пользователь MyComponent нажимает этот глагол, обработчик должен вызвать конкретный экземпляр MyComponent, который пользователь щелкнул правой кнопкой мыши, чтобы увидеть глагол .)

Любые рекомендации, оцененные.

ответ

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) 

Когда и как вы получите ссылку на ваш компонент зависит от того, какой базовый редактор введите ваш дизайнер будет наследовать.

0

Спасибо всем.

Я обнаружил свойство Component MyComponentDesigner, которое я могу передать в MyComponent, чтобы получить требуемую ссылку.

Смежные вопросы