Domanda

Posso mettere un controllo Java (SWT, Swing, ...) su un controllo C #?

So che è possibile con i controlli web ma non mi piace in questo modo.

È stato utile?

Soluzione

L'ho ricontrollato, sembra che IKVM attualmente non abbia abbastanza supporto nel suo assemblaggio AFT. Penso che l'unico modo per fare ciò di cui hai bisogno sia eseguire il tuo controllo Java all'interno di un processo separato con finestra principale nascosta e in qualche modo passare l'handle di quel controllo alla tua applicazione C #.


Risposta originale:

Non sono sicuro che puoi semplicemente " aggiungere " ma puoi provare in questa direzione:

Sarebbe necessario convertire le classi java in assembly .Net tramite IKVM.

  1. Prima di tutto devi ottenere l'handle del controllo java. Puoi guardare questo post se hai bisogno di informazioni su come fare Questo. Ho fallito in questo passaggio perché non ho trovato Win32DrawingSurface e DrawingSurfaces nelle librerie di IKVM, forse è sufficiente creare un metodo getHandle () statico sul lato Java.

  2. Ottieni l'handle del controllo C # principale. È semplice poiché Control ha la sua proprietà Handle.

  3. Dopo aver ottenuto entrambi gli handle è possibile impostare uno dei come parent su un altro. Per fare questo è necessario chiamare la funzione SetParent da WINAPI.

    [DllImport (" user32.dll ")] IntPtr SetParent esterno statico privato (IntPtr hWndChild, IntPtr hWndNewParent);

Altri suggerimenti

Ho scritto esempi:
- Incorporamento dei componenti Java nella GUI di .NET,
- .NET Componente WinForm incorporato nella GUI Java.
Li puoi trovare nei prodotti:

http://www.simtel.net/product .php [id] 95126 [SiteID] simtel.net
http://www.simtel.net/product .php [id] 98653 [SiteID] simtel.net

Guarda il progetto IKVM . È una Java Virtual Machine implementata in .net che consente l'interoperabilità di java e .net.

Non sono sicuro di quanto sia completo e se abilita la funzionalità richiesta ma vale la pena dare un'occhiata.

Se il controllo non è un controllo personalizzato ed è solo qualcosa in movimento, potresti trovarlo disponibile in Microsoft Visual J # (versione 2.0 o componente aggiuntivo aggiuntivo per 1.1 http://msdn.microsoft.com/en-us/vjsharp/bb188695. aspx )

Notare che un controllo Swing J # non giocherà la palla rilasciata direttamente in un'app WinForms, potrebbe essere necessario fornire un controllo host che delega tutti i disegni alla copia dell'immagine da un controllo J # nascosto posto all'interno di un semplice modulo J # (anche nascosto in cui l'area di visualizzazione del modulo viene ridimensionata in modo che corrisponda all'area di visualizzazione del controllo host. Ciò eliminerebbe almeno la necessità di un processo separato. Questo utilizzo presenta diverse limitazioni, sospetto che il controllo che si desidera utilizzare sia complesso (o l'ho appena reimplementato).

Nota che J # sta morendo ufficialmente (niente più manutenzione seria) e ufficialmente non si preoccuperà affatto di supportarlo nel 2015. Aspettatevi di usarlo per causare dolore considerevole a lungo termine, ma se avete davvero bisogno di una parte di esso questo potrebbe aiutare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top