Panoramica di Windows Forms e applicazioni non gestite
Le applicazioni e i controlli Windows Form possono interagire con applicazioni non gestite, con alcune avvertenze. Le sezioni seguenti descrivono gli scenari e le configurazioni supportati dalle applicazioni e dai controlli Windows Form e quelli che non supportano.
Controlli Windows Form e applicazioni ActiveX
Ad eccezione di Microsoft Internet Explorer e Microsoft Foundation Classes (MFC), i controlli Windows Form non sono supportati nelle applicazioni progettate per ospitare controlli ActiveX. Altre applicazioni e strumenti di sviluppo in grado di ospitare controlli ActiveX, inclusi i contenitori di test ActiveX di versioni di Visual Studio precedenti a Visual Studio .NET 2003, non sono host supportati per i controlli Windows Form.
Questi vincoli si applicano anche all'uso dei controlli Windows Forms tramite l'interoperabilità COM di Component Object Model. L'uso di un controllo Windows Forms tramite un wrapper COM invocabile (CCW) è supportato solo in Internet Explorer. Per altre informazioni sull'interoperabilità COM, vedere
Nella tabella seguente viene illustrato il supporto dell'hosting ActiveX disponibile per i controlli Windows Forms.
Versione di Windows Forms | Appoggiare |
---|---|
.NET Framework versione 1.0 | Internet Explorer 5.01 e versioni successive |
.NET Framework versione 1.1 e successive | Internet Explorer 5.01 e versioni successive Microsoft Foundation Classes (MFC) 7.0 e versioni successive |
Hosting di componenti Windows Form come controlli ActiveX
In .NET Framework 1.1 il supporto è stato esteso per includere MFC 7.0 e versioni successive. Questo supporto include qualsiasi contenitore completamente compatibile con il contenitore di controlli ActiveX MFC 7.0 e versioni successive.
Tuttavia, la registrazione dei controlli Windows Form come controlli ActiveX non è supportata. Inoltre, la chiamata al metodo com.ms.win32.Ole32.CoCreateInstance
per i controlli Windows Form non è supportata. È supportata solo l'attivazione gestita dei controlli Windows Form. Dopo aver creato un controllo Windows Form, è possibile ospitarlo in un'applicazione MFC esattamente come con un controllo ActiveX.
Per utilizzare i controlli Windows Forms nella tua applicazione non gestita, è necessario ospitare il CLR utilizzando le API di hosting del CLR non gestite oppure utilizzare le funzionalità di interoperabilità C++. L'uso delle funzionalità di interoperabilità C++ è la soluzione consigliata.
Windows Forms nelle applicazioni client COM
Quando si apre un Windows Form da un'applicazione client COM, ad esempio un'applicazione Visual Basic 6.0 o un'applicazione MFC, il modulo potrebbe comportarsi in modo imprevisto. Ad esempio, quando si preme TAB, lo stato attivo non cambia da un controllo a un altro. Quando si preme il tasto ENTER mentre un pulsante di comando è attivo, l'evento Click del pulsante non viene sollevato. È anche possibile che si verifichi un comportamento imprevisto per le sequenze di tasti o l'attività del mouse.
Questo comportamento si verifica perché l'applicazione non gestita non implementa il supporto del ciclo di messaggi che Windows Forms richiede per funzionare correttamente. Il ciclo di messaggi fornito dall'applicazione client COM è fondamentalmente diverso dal ciclo di messaggi di Windows Form.
Il ciclo di messaggi di un'applicazione è un ciclo di programma interno che recupera i messaggi dalla coda di messaggi di un thread, li converte e li invia all'applicazione da gestire. Il ciclo di messaggi per un Windows Form non ha la stessa architettura dei cicli di messaggi forniti dalle applicazioni precedenti, ad esempio applicazioni Visual Basic 6.0 e applicazioni MFC. I messaggi della finestra inviati al ciclo di messaggi possono essere gestiti in modo diverso rispetto a quello previsto da Windows Form. Pertanto, può verificarsi un comportamento imprevisto. Alcune combinazioni di sequenze di tasti potrebbero non funzionare, alcune attività del mouse potrebbero non funzionare o alcuni eventi potrebbero non essere generati come previsto.
Risoluzione dei problemi di interoperabilità
È possibile risolvere questi problemi visualizzando il modulo in un ciclo di messaggi di .NET Framework, creato usando il metodo Application.Run.
Per fare in modo che un Windows Form funzioni correttamente da un'applicazione client COM, è necessario eseguirlo in un ciclo di messaggi windows Form. A tale scopo, usare uno degli approcci seguenti:
Utilizzare il metodo Form.ShowDialog per visualizzare Windows Form. Per altre informazioni, vedere Procedura: Supportare l'interoperabilità COM visualizzando un Windows Form con il metodo ShowDialog.
Visualizzare ogni Windows Form in un nuovo thread. Per ulteriori informazioni, vedere Procedura: Supportare l'interoperabilità COM visualizzando ogni Windows Form su un thread distinto.
Vedere anche
- Windows Form e applicazioni non gestite
- Interop COM
- Interoperabilità COM nelle applicazioni .NET Framework
- Esempi di interoperabilità COM
- Aximp.exe (Utilità di importazione di controlli ActiveX di Windows Forms)
- L'Esposizione di Componenti .NET Framework a COM
- Confezionamento di un Assembly per COM
- Registrazione degli assembly con COM
- Procedura: Supportare l'interoperabilità COM visualizzando un Windows Form con il metodo ShowDialog
- Procedura: Supportare l'interoperabilità COM visualizzando ogni Windows Form nel proprio thread
.NET Desktop feedback