Элемент управления OCX: Sub New() недоступен в этом контексте, потому что он «Частный»

#vb.net #vb6 #activex #com-interop #vb6-migration

#vb.net #vb6 #activex #совместное взаимодействие #vb6-миграция

Вопрос:

Недавно я пытался создать элемент управления ActiveX и использовать его в некоторых vb.net код. После долгих усилий я создал свой элемент управления в vb6 и сгенерировал файл ocx. Я пытался использовать его, как показано в документах Microsoft здесь, но безрезультатно. На :

 myActiveX = New MyActiveXComponent.MyClass()
  

я продолжаю получать

MyActiveXComponent.MyClass.Частный Sub New() недоступен в этом контексте, потому что он «Частный»

Я могу импортировать его в toolbox и использовать таким образом, но я бы предпочел этого не делать, я использую visual studio 2005. Также у меня есть ocx, который, как я предполагаю, я могу использовать обоими способами (не мой), поэтому я подозреваю, что с моим что-то не так, но я не могу понять, что.

Комментарии:

1. Похоже, что вы создаете экземпляр, если вызывается класс MyClass . Это класс, который вы определили в своем ocx?

2. @tcarvin Да, пытаясь создать пользовательский элемент управления, в данном случае MyClass, который содержится в ocx, вы можете найти исходный код здесь support.microsoft.com/en-us/help/315847 /… .

3. Это ваше Sub New личное? Возможно, так и должно быть Public ?

4. @ChrisDunaway Я вообще не могу написать sub new в vb6, насколько я знаю, New должно быть внутри оболочки, сгенерированной interop , и оно просматривается в object browser, но оно загружено из System. Object, где в другом рабочем ocx это член класса, почти так же, как это был модуль класса.

Ответ №1:

Вы немного смешиваете классы и элементы управления. Но в любом случае, если вы хотите, чтобы ваш класс был общедоступным, вам нужно установить инстансинг, и я предлагаю использовать MultiUse .

Свойства

Комментарии:

1. Class es в проектах OCX по умолчанию являются PublicNotCreatable .