2012-03-28 5 views
1

私は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

コントロールを作成するのはプロパティだけではなく、コントロールクラスの1つから派生しています。表示されないプロパティと警告の修正は、実際の警告の内容によって異なります。 – Deanna

+0

私はvb6よりcomは評価していないと思っています.net継承。私は警告の例を追加しました。 – IvanH

+0

これらの警告は通常のものですが、ほとんどの.NETオブジェクトはCOMに公開されず、実際に正しいインターフェイスを実装するために必要なものだけが表示されます。 – Deanna

答えて

0

ちょうど警告を出しコピーして、メモ帳+ +のようなものの中にそれらをもたらします。マクロをすばやく処理してフィルタリングすることで、宣言が必要なすべての関数を分離することができます。それから、本当に素早く宣言してください。

+0

問題は、私が 'ClassInterfaceType.AutoDual'を使用していて、クラスが' System.Windows.Forms.UserControl'から派生していることです。失われた機能は、**私が宣言してほしくない**機能に関するものです。私は必要なものを探しています。 – IvanH

関連する問題