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
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
Ich denke, als vb6 über com nicht auswertet .net Vererbung. Ich habe ein Beispiel für eine Warnung hinzugefügt. – IvanH
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