Übersicht über Windows Forms und nicht verwaltete Anwendungen
Windows Forms-Anwendungen und -Steuerelemente können mit nicht verwalteten Anwendungen zusammenwirken. Dabei ist jedoch einige Vorsicht geboten. In den folgenden Abschnitten wird beschrieben, welche Szenarien und Konfigurationen von Windows Forms-Anwendungen und -Steuerelementen unterstützt werden und welche nicht.
Windows Forms-Steuerelemente und ActiveX-Anwendungen
Außer in Microsoft Internet Explorer und Microsoft Foundation Classes (MFC) werden Windows Forms-Steuerelemente in Anwendungen, die für ActiveX-Steuerelemente entwickelt wurden, nicht unterstützt. Bei anderen Anwendungen und Entwicklungstools, die in der Lage sind, ActiveX-Steuerelemente zu hosten (einschließlich ActiveX-Testcontainern aus Visual Studio-Versionen vor Visual Studio .NET 2003) handelt es sich um nicht unterstützte Hosts für Windows Forms-Steuerelemente.
Diese Einschränkungen gelten auch für die Verwendung von Windows Forms-Steuerelementen durch COM-Interopt (Component Object Model). Die Verwendung eines Windows Forms-Steuerelements über einen COM Callable Wrapper (CCW) wird nur in Internet Explorer unterstützt. Weitere Informationen über COM-Interop finden Sie unter
COM-Interop (Visual Basic) und Erweiterte COM-Interoperabilität.
In der folgenden Tabelle wird gezeigt, welche ActiveX-Hosts für Windows Forms-Steuerelemente unterstützt werden.
Windows Forms-Version |
Unterstützung |
---|---|
.NET Framework, Version 1.0 |
Internet Explorer 5.01 und höhere Versionen |
.NET Framework, Version 1.1 und höher |
Internet Explorer 5.01 und höhere Versionen Microsoft Foundation Classes (MFC) 7.0 und höher |
Hosten von Windows Forms-Komponenten als ActiveX-Steuerelemente
In .NET Framework 1.1 wurde die Unterstützung auf MFC 7.0 und höhere Versionen ausgedehnt. Diese Unterstützung umfasst alle Container, die vollständig kompatibel mit dem ActiveX-Steuerelementcontainer von MFC 7.0, und höher, sind.
Die Registrierung von Windows Forms-Steuerelementen als ActiveX-Steuerelemente wird jedoch nicht unterstützt. Außerdem wird das Aufrufen der com.ms.win32.Ole32.CoCreateInstance-Methode für Windows Forms-Steuerelemente nicht unterstützt. Nur die verwaltete Aktivierung von Windows Forms-Steuerelementen wird unterstützt. Nachdem Sie ein Windows Forms-Steuerelement erstellt haben, können Sie es wie ein ActiveX-Steuerelement in einer MFC-Anwendung hosten.
Um Windows Forms-Steuerelemente in einer nicht verwalteten Anwendung einzusetzen, müssen Sie CLR entweder mithilfe der Hosting-APIs der nicht verwalteten CLR hosten oder die Features von C++-Interop verwenden. Die Verwendung der Features von C++-Interop wird empfohlen.
Windows Forms in COM-Clientanwendungen
Wenn Sie ein Windows Form von einer COM-Clientanwendung aus öffnen, z. B einer Visual Basic 6.0- oder MFC-Anwendung, kann das Formular ein unerwartetes Verhalten aufweisen. Wenn Sie beispielsweise die TAB-TASTE drücken, wechselt der Fokus nicht zwischen den Steuerelementen. Wenn Sie die EINGABETASTE drücken, während eine Befehlsschaltfläche den Fokus hat, wird das Click-Ereignis der Schaltfläche nicht ausgelöst. Auch im Hinblick auf Tastatureingaben oder die Mausaktivität kann ein unerwartetes Verhalten auftreten.
Der Grund für dieses Verhalten liegt darin, dass von der nicht verwalteten Anwendung keine Unterstützung für Meldungsschleifen implementiert wird, die für das einwandfreie Funktionieren von Windows Forms erforderlich sind. Die von der COM-Clientanwendung bereitgestellte Meldungsschleife unterscheidet sich grundlegend von der Windows Forms-Meldungsschleife.
Meldungsschleifen einer Anwendung sind interne Programmschleifen, die Meldungen aus der Meldungswarteschlange eines Threads abrufen, diese übersetzen und sie dann zur weiteren Verarbeitung an die Anwendung senden. Die Meldungsschleife für ein Windows Form hat nicht dieselbe Architektur wie die Meldungsschleifen, die von früheren Anwendungen, z. B. Visual Basic 6.0- und MFC-Anwendungen, bereitgestellt wurden. Die in der Meldungsschleife angezeigten Fenstermeldungen können also anders behandelt werden als vom Windows Form vorgesehen. Ein unerwartetes Verhalten kann folglich nicht ausgeschlossen werden. Einige Tastenkombinationen und Mauaktivitäten funktionieren möglicherweise nicht, bzw. einige Ereignisse werden nicht ausgelöst wie erwartet.
Beheben von Interoperabilitätsproblemen
Sie können diese Probleme beheben, indem Sie das Formular in einer .NET Framework-Meldungsschleife anzeigen, die mit der Application.Run-Methode erstellt wird.
Damit ein Windows Form über eine COM-Clientanwendung ordnungsgemäß funktioniert, müssen Sie es in einer Windows Forms-Meldungsschleife ausführen. Verwenden Sie hierzu eines der folgenden Verfahren:
Zeigen Sie das Windows Form mithilfe der Form.ShowDialog-Methode an. Weitere Informationen finden Sie unter Gewusst wie: Unterstützen von COM-Interop durch Anzeigen eines Windows Forms mit der ShowDialog-Methode.
Zeigen Sie jedes Windows Form in einem neuen Thread an. Weitere Informationen finden Sie unter Gewusst wie: Unterstützen von COM-Interop durch das Anzeigen einzelner Windows Forms in einem eigenen Thread.
Siehe auch
Aufgaben
Referenz
Aximp.exe (Windows Forms ActiveX Control Importer-Tool)
Konzepte
Verfügbarmachen von .NET Framework-Komponenten in COM
Verpacken einer Assembly für COM
Registrieren von Assemblys mit COM
Weitere Ressourcen
Windows Forms und nicht verwaltete Anwendungen
Erweiterte COM-Interoperabilität
COM-Interoperabilität in .NET Framework-Anwendungen (Visual Basic)