2009-11-04 11 views
5

私は、VBコントロール(Labelなど)とWindows Commonコントロール(Treeview、ImageListなど)を持つフォームを持つVB6プロジェクトを継承しました。これはusercontrolの理想的な候補のようです。VB6は.NET WinFormでocxを作成しましたか?

私は同僚に、.NET WinFormsプロジェクトで使用されるocx ActiveXコントロールとしてコンパイルする可能性を述べました。以前はC++プロジェクトでVB ocxを使用していた経験があり、試作段階では問題なく動作しましたが、実際に使用するとタイミングやリフレッシュの問題がありました(ダイアログの多くのコントロール、コントロール間のタブ移動、ダイアログなど)。

.NET WindowsフォームでVB6オーサリングされたocxを使用した経験がある人はいますか?微妙な問題があると思いますか、一緒にうまくいくのですか?

+0

+1興味深い質問です。 VB6で書いたOCXを.NETフォームで使用した場合の実際の経験に関連する回答を見ることは特に興味深いでしょう。 – MarkJ

+0

使用している.NETのバージョンによって違いがあるのだろうかと思います。 –

答えて

2

.NETからVB 6.0への移行は、正確にはMicrosoftのInterop Forms Toolkit 2.0を使用しています。私はこれを何度もやりました。反対に行くのは痛いかもしれない。

あなたの同僚が心配していることは非常に現実的です。どの制御がどの時間にどのように集中しているのか、どのように考えるのかは、そのフードの中でどのように扱われるのかという問題があります。これを代表する例は、コントロール間でタブ移動することです。

いくつかの.NETコントロールとVB 6 Active Xを持つ.NETフォームがあると考えてください。このActiveXにもコントロールがあります。今すぐ.NETフォームをタブすると、ActiveXを取得するとがすべてのコントロールのタブに移動するようになりますではActiveXが使用されますが、そうではありません。一度にActiveXコントロール全体をタブで表示します。これは問題だ。

VB 6.0の中で.NETを逆順に使用している場合は、コード内でこれを処理する必要があります。このCodeProject articleには、ActiveXHelpersという優れたクラスがあります。しかし、基本的には、KeyPressedイベントを手動で処理し、タブまたはシフト+タブをチェックし、次/前のコントロールを手動でフォーカスすることになります。

あなたの状況では、このように動作するようにVB 6のコードを変更する必要があります。 NETでコントロールを書き直す努力はほとんどないでしょう。私は経験と爽快な問題を経験したことはありませんが、私は.NET - > VBが逆になってしまったと言いました。いずれにしても、多くの苦痛が伴う可能性があります。イベントのシンクやVBでのデザインとランタイムの違いなど、他の問題が発生する可能性が最も高くなります。

1

残念ながら私は半分の答えしか持っていません。我々は、.NETフォーム上で単一のVB6 OCXコントロールを使用し、問題なく動作します。そのフォーム上の他の.NETコントロールまたはOCXコントロールでは使用されません。これは、データベースへの特殊なビューを提供します。

0

私たちのソフトウェアスイートには、VB6と.NETがかなり混在しています。 VB.NETとC#の両方のアプリケーションで、多数のVB6オーサリング済みActiveXコントロールを使用しています。ほとんどの場合、それは驚くほどうまく機能します。

VB6のコントロールのバージョンが変更されると、.NETプロジェクトで参照を再追加する必要があります。 .NETのinteropライブラリは特定のバージョンのコントロールに縛られており、プロジェクトからinteropを削除して再作成することなく、新しいバージョンのinteropを再生成することはできないようです。ちょっとした痛みですが、私はそれを行う方法を見つけたので、コントロールのすべてのインスタンスを削除して再作成する必要はありません。

関連する問題