2012-03-28 3 views
1

Ich habe ein Winforms-Steuerelement in vb.net für VB6-Programm geschrieben. Das Steuerelement wird der VB6-Steuerelementsammlung dynamisch hinzugefügt.Welche Eigenschaften sind erforderlich, damit eine Klasse von einer VB6 Controls-Sammlung akzeptiert wird?

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

Wenn die .net-Klasse (SelVB6) verfügt über alle notwendigen Eigenschaften der Add-Methode gibt VB6 Steuer Wrapper und Kontrolle sichtbar ist. Andernfalls gibt die Add-Methode nichts zurück und die Steuerung ist in VB6 nicht verfügbar.
Die Klasse .net ist abgeleitet von System.Windows.Forms.UserControl, die (zum Glück) alle erforderlichen Eigenschaften hat. Die Klasse .net ist mit dem Attribut ClassInterface versehen, um zu gewährleisten, dass Eigenschaften für COM verfügbar sind.

<ClassInterface(ClassInterfaceType.AutoDual)> 
Public Class SelVB6 

Alles funktioniert, aber nicht alle Eigenschaften von System.Windows.Forms.UserControl sind com sichtbar und viele Warnungen werden in VS2010 generiert. Um Warnungen loszuwerden, muss ich wissen, welche Eigenschaften notwendig sind, eine Schnittstelle definieren und ClassInterfaceType.None verwenden.

Hinweise

darf ich nicht Interop Forms Toolkit verwenden.
Ich weiß, dass ich Steuerelementeigenschaften Control Properties in Visual Basic 6 auflisten kann.

Warnung Beispiel:

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

Es sind nicht nur die Eigenschaften, die es zu einem Steuerelement machen, es stammt aus einer der Control-Klassen. Das Korrigieren der nicht angezeigten Eigenschaften und der Warnungen hängt davon ab, was die tatsächlichen Warnungen sind. – Deanna

+0

Ich denke, als vb6 über com nicht auswertet .net Vererbung. Ich habe ein Beispiel für eine Warnung hinzugefügt. – IvanH

+0

Diese Warnungen sind normal, die meisten .NET-Objekte werden nicht mit COM in Verbindung gebracht, sondern nur diejenigen, die zur Implementierung der richtigen Schnittstelle benötigt werden. – Deanna

Antwort

0

einfach die Warnungen kopieren und sie in etwas wie Notepad ++ zu bringen. Dann können Sie schnell ein Makro erstellen und es ausfiltern, so dass Sie alle Funktionen isolieren, die deklariert werden müssen. Dann deklariere sie einfach sehr schnell.

+0

Das Problem ist, dass ich 'ClassInterfaceType.AutoDual' verwende und die Klasse von' System.Windows.Forms.UserControl' abgeleitet ist. Bei den Wanings geht es um Funktionen, die ich ** nicht deklarieren will. Ich suche nach denen, die notwendig sind. – IvanH