私はVB6プログラムのためにvb.netで書かれたwinformsコントロールを持っています。コントロールはVB6コントロールコントロールコレクションに動的に追加されます。 .NETクラス(SelVB6
)は、すべての必要な特性を有する場合VB6 Controlsコレクションでクラスを受け入れるには、どのプロパティが必要ですか?
Set ctrlVB6 = Controls.Add("NETNamespace.SelVB6", "SelNet")
は、Addメソッドは、VB6制御ラッパーを返し、コントロールが表示されています。それ以外の場合、Addメソッドは何も返さず、VB6ではコントロールを使用できません。
.netクラスはSystem.Windows.Forms.UserControl
から派生しています(幸運なことに)すべての必須プロパティがあります。 .netクラスはCOMに利用可能なプロパティを保証するためにClassInterface
属性で装飾されています。
<ClassInterface(ClassInterfaceType.AutoDual)>
Public Class SelVB6
すべてが動作しますが、ないSystem.Windows.Forms.UserControl
のすべてのプロパティが表示され、COMと警告の多くは、VS2010で生成されます。警告を取り除くには、必要なプロパティを知り、インタフェースを定義してClassInterfaceType.None
を使用する必要があります。
ノート
私はInterop Forms Toolkitの使用を許可しておりません。
私は制御プロパティーをリストできることを知っていますControl Properties in 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つから派生しています。表示されないプロパティと警告の修正は、実際の警告の内容によって異なります。 – Deanna
私はvb6よりcomは評価していないと思っています.net継承。私は警告の例を追加しました。 – IvanH
これらの警告は通常のものですが、ほとんどの.NETオブジェクトはCOMに公開されず、実際に正しいインターフェイスを実装するために必要なものだけが表示されます。 – Deanna