C#winformsコントロールにJavaコントロールを埋め込む方法は?
質問
C#コントロールにJavaコントロール(SWT、Swing、...)を配置できますか?
Webコントロールを使用することは可能ですが、この方法は好きではありません。
解決
再確認しましたが、IKVMは現在、AFTアセンブリで十分なサポートを提供していないようです。必要なことを行う唯一の方法は、隠されたメインウィンドウを持つ別のプロセス内でJavaコントロールを実行し、そのコントロールのハンドルを何らかの方法でC#アプリケーションに渡すことだと思います。
元の答え:
単に「追加」できるかどうかはわかりません。それが、あなたはこの方向を試すことができます:
IKVMを介してJavaクラスを.Netアセンブリに変換する必要があります。
-
まず、Javaコントロールのハンドルを取得する必要があります。方法に関する情報が必要な場合は、この投稿をご覧ください。この。 IKVMのライブラリにWin32DrawingSurfaceとDrawingSurfacesが見つからなかったため、このステップで失敗しました。Java側で静的getHandle()メソッドを作成するだけで十分かもしれません。
-
親C#コントロールのハンドルを取得します。 ControlにはHandleプロパティがあるため、簡単です。
-
両方のハンドルを取得した後、一方を他方の親として設定できます。これを行うには、WINAPIからSetParent関数を呼び出す必要があります。
[DllImport(" user32.dll")] private static extern IntPtr SetParent(IntPtr hWndChild、IntPtr hWndNewParent);
他のヒント
例を書いた:
-.NET GUIに埋め込むJavaコンポーネント、
-Java GUIに埋め込まれた.NET WinFormコンポーネント。
製品でそれらを見つけることができます:
http://www.simtel.net/product .php [id] 95126 [SiteID] simtel.net
http://www.simtel.net/product .php [id] 98653 [SiteID] simtel.net
JNBridgeを使用して実行できます。
IKVM プロジェクトをご覧ください。 Javaと.netの相互運用性を可能にする.netに実装されたJava仮想マシン。
完全にどの程度完全かはわかりません。必要な機能を有効にするかどうかは一見の価値があります。
コントロールがカスタムコントロールではなく、スイングしているだけの場合は、MicrosoftのVisual J#(バージョン2.0または1.1の補足的なアドイン) http://msdn.microsoft.com/en-us/vjsharp/bb188695。 aspx )
J#Swingコントロールは、WinFormsアプリにドロップされたボールを直接再生しないことに注意してください。単純なj#フォーム(非表示)内にある非表示のJ#コントロールからすべての描画を委任するホストコントロールを提供する必要がある場合がありますフォームのビュー領域は、ホストコントロールのビュー領域に合わせてサイズ変更されます。これにより、少なくとも別のプロセスが不要になります。この使用にはいくつかの制限があります。使用するコントロールは複雑だと思います再実装しました)。
J#は公式に死にかけている(これ以上深刻なメンテナンスは行われていない)ことに注意してください。 長期的にかなりの痛みを引き起こすためにそれを使用することを期待しますが、本当にそれの一部が必要な場合、これは役立つかもしれません。