Какие свойства необходимы для того, чтобы класс был принят коллекцией VB6 Controls? - PullRequest
1 голос
/ 28 марта 2012

У меня есть элемент управления winforms, написанный на vb.net для программы VB6. Элемент управления динамически добавляется в коллекцию элементов управления VB6.

Set ctrlVB6 = Controls.Add("NETNamespace.SelVB6", "SelNet")

Если класс .net (SelVB6) обладает всеми необходимыми свойствами, метод Add возвращает оболочку элемента управления VB6 и элемент управления виден. В противном случае метод Add ничего не возвращает и элемент управления недоступен в VB6.
Класс .net является производным от System.Windows.Forms.UserControl, который (к счастью) обладает всеми необходимыми свойствами. Класс .net снабжен атрибутом ClassInterface, чтобы гарантировать, что свойства доступны для COM.

<ClassInterface(ClassInterfaceType.AutoDual)>
Public Class SelVB6

Все работает, но не все свойства System.Windows.Forms.UserControl видимы, и в VS2010 генерируется множество предупреждений. Чтобы избавиться от предупреждений, мне нужно знать, какие свойства необходимы, определить интерфейс и использовать ClassInterfaceType.None.

Примечания

Мне не разрешено использовать Interop Forms Toolkit .
Я знаю, что могу перечислить свойства элемента управления Свойства элемента управления в Visual Basic 6 .

Пример предупреждения:

Type library exporter warning processing 'NETNamespace.SelVB6.PreProcessControlMessage(#0)'. Warning: Non COM visible value type 'System.Windows.Forms.PreProcessControlState' is being referenced either from the type currently being exported or from one of its base types. Microsoft.Common.targets

1 Ответ

0 голосов
/ 07 августа 2013

Просто скопируйте предупреждения и перенесите их в нечто вроде Блокнота ++. Затем вы можете быстро создать макрос и отфильтровать его, чтобы изолировать все функции, которые должны быть объявлены. Тогда просто объявите их очень быстро.

...