Cenni preliminari su Windows Form e applicazioni non gestite

Le applicazioni e i controlli Windows Form possono interagire con le applicazioni non gestite, con alcune raccomandazioni. Nelle sezioni che seguono vengono descritti gli scenari e le configurazioni supportati dalle applicazioni e dai controlli Windows Form e quelli non supportati.

Controlli Windows Form e applicazioni ActiveX

Fatta eccezione per Microsoft Internet Explorer e MFC (Microsoft Foundation Classes), i controlli Windows Form non sono supportati in applicazioni progettate per ospitare controlli ActiveX. Le altre applicazioni e gli strumenti per lo sviluppo in grado di ospitare controlli ActiveX, come i Test Container ActiveX di versioni di Visual Studio precedenti a Visual Studio .NET 2003, non sono host supportati per i controlli Windows Form.

Queste limitazioni si applicano anche all'utilizzo dei controlli Windows Form tramite l'interoperabilità COM (Component Object Model). L'utilizzo di un controllo Windows Form tramite COM Callable Wrapper (CCW) è supportato solo in Internet Explorer. Per ulteriori informazioni sull'interoperabilità COM, vedere

COM Interop e Interoperabilità COM avanzata.

Nella tabella riportata di seguito è illustrato il supporto per l'hosting ActiveX per i controlli Windows Form.

Versione di Windows Form

Supporto

.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

MFC (Microsoft Foundation Classes) 7.0 e versioni successive

Hosting dei 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 tutti i contenitori completamente compatibili con il contenitore di controlli ActiveX di MFC 7.0 e versioni successive.

La registrazione dei controlli Windows Form come controlli ActiveX non è tuttavia supportata, analogamente alla chiamata al metodo com.ms.win32.Ole32.CoCreateInstance per i controlli Windows Form. È supportata solo l'attivazione gestita dei controlli Windows Form. Una volta creato un controllo Windows Form, è possibile inserirlo in un'applicazione MFC come se fosse un controllo ActiveX.

Per utilizzare i controlli Windows Form nell'applicazione non gestita, inserire il CLR utilizzando le API per l'hosting del CLR non gestito oppure utilizzare le funzioni di interoperabilità C++. Si consiglia di utilizzare le funzioni di interoperabilità C++.

Windows Form in applicazioni client COM

Quando si apre un Windows Form da un'applicazione client COM, come un'applicazione Visual Basic 6.0 o un'applicazione MFC, il form può presentare comportamenti imprevisti. Ad esempio, quando si preme il tasto TAB, lo stato di attivazione non passa da un controllo a un altro. Se si preme il tasto INVIO quando un pulsante di comando è nello stato di attivazione, l'evento Click del pulsante non viene generato. Può verificarsi un comportamento imprevisto anche per le pressioni dei tasti o l'attività del mouse.

Questo comportamento si verifica in quanto l'applicazione non gestita non implementa il supporto del ciclo di messaggi richiesto per il funzionamento corretto di Windows Form. 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 interno di programma che recupera i messaggi dalla coda di messaggi di un thread, li converte e li invia all'applicazione per la gestione. Il ciclo di messaggi di Windows Form non dispone della stessa architettura dei cicli di messaggi fornita dalle applicazioni precedenti, come le applicazioni Visual Basic 6.0 e le applicazioni MFC. I messaggi inseriti nel ciclo dei messaggi possono essere gestiti in modo diverso da quanto previsto nel Windows Form. Di conseguenza, può prodursi un comportamento imprevisto. Alcune combinazioni di tasti potrebbero non funzionare, così come alcune operazioni eseguite con il mouse, oppure alcuni eventi potrebbero non essere generati in modo appropriato.

Risoluzione di problemi di interoperabilità

È possibile risolvere i problemi di interoperabilità visualizzando il form in un ciclo di messaggi .NET Framework, creato utilizzando il metodo Application.Run.

Perché un Windows Form funzioni correttamente da un'applicazione client COM, è necessario eseguirlo in un ciclo di messaggi Windows Form. Per eseguire questa operazione, adottare uno degli approcci seguenti:

Vedere anche

Attività

Procedura: supportare l'interoperabilità COM visualizzando un Windows Form con il metodo ShowDialog

Procedura: supportare l'interoperabilità COM mediante la visualizzazione di ogni Windows Form nel relativo thread

Riferimenti

Aximp.exe (utilità di importazione di controlli ActiveX di Windows Form)

Concetti

Esposizione di componenti .NET Framework a COM

Preparazione di un assembly per COM

Registrazione di assembly presso COM

Altre risorse

Windows Form e applicazioni non gestite

COM Interop

Interoperabilità COM avanzata

COM Interoperability in .NET Framework Applications

COM Interoperability Samples