Übersicht über Windows Forms und nicht verwaltete Anwendungen
Windows Forms-Anwendungen und -Steuerelemente können mit nicht verwalteten Anwendungen mit einigen Einschränkungen zusammenarbeiten. In den folgenden Abschnitten werden die Szenarien und Konfigurationen beschrieben, die Von Windows Forms-Anwendungen und -Steuerelementen unterstützt werden, und die, die sie nicht unterstützen.
Windows Forms-Steuerelemente und ActiveX-Anwendungen
Mit Ausnahme von Microsoft Internet Explorer und Microsoft Foundation Classes (MFC) werden Windows Forms-Steuerelemente in Anwendungen, die ActiveX-Steuerelemente hosten, nicht unterstützt. Andere Anwendungen und Entwicklungstools, die ActiveX-Steuerelemente hosten können, einschließlich der ActiveX-Testcontainer aus Versionen von Visual Studio, die älter als Visual Studio .NET 2003 sind, können keine Windows Forms-Steuerelemente hosten.
Diese Einschränkungen gelten auch für die Verwendung von Windows Forms-Steuerelemente über die Interoperabilität des Component Object Model (COM). Die Verwendung eines Windows Forms-Steuerelements über einen aufrufbaren COM-Wrapper (CCW) wird nur in Internet Explorer unterstützt. Weitere Informationen zur COM-Interoperabilität finden Sie unter
Die folgende Tabelle zeigt die verfügbare ActiveX-Hostingunterstützung für Windows Forms-Steuerelemente.
Windows Forms-Version | Unterstützen |
---|---|
.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 der Support um MFC 7.0 und höhere Versionen erweitert. Diese Unterstützung umfasst alle Container, die vollständig mit dem ActiveX-Steuerelementcontainer von MFC 7.0 oder höher kompatibel 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 genauso wie bei einem ActiveX-Steuerelement in einer MFC-Anwendung hosten.
Um Windows Forms-Steuerelemente in Ihrer nicht verwaltete Anwendung zu verwenden, müssen Sie entweder die CLR mithilfe der nicht verwalteten CLR-Hosting-APIs hosten oder die C++-Interop-Features verwenden. Die Verwendung der C++-Interop-Funktionen ist die empfohlene Lösung.
Windows Forms in COM-Clientanwendungen
Wenn Sie ein Windows Form aus einer COM-Clientanwendung öffnen, z. B. eine Visual Basic 6.0-Anwendung oder eine MFC-Anwendung, verhält sich das Formular möglicherweise unerwartet. Wenn Sie beispielsweise die TAB-TASTE drücken, ändert sich der Fokus nicht von einem Steuerelement in ein anderes Steuerelement. Wenn Sie die EINGABETASTE drücken, während eine Befehlsschaltfläche den Fokus hat, wird das Click-Ereignis der Schaltfläche nicht ausgelöst. Möglicherweise tritt auch unerwartetes Verhalten bei Tastaturanschlägen oder Mausbewegungen auf.
Dieses Verhalten tritt auf, da die nicht verwaltete Anwendung die Nachrichtenschleifenunterstützung nicht implementiert, die Windows Forms benötigt, um ordnungsgemäß zu funktionieren. Die von der COM-Clientanwendung bereitgestellte Nachrichtenschleife unterscheidet sich grundlegend von der Windows Forms-Nachrichtenschleife.
Die Nachrichtenschleife einer Anwendung ist eine interne Programmschleife, die Nachrichten aus der Nachrichtenwarteschlange eines Threads abruft, sie übersetzt und diese dann an die zu behandelnde Anwendung sendet. Die Nachrichtenschleife für ein Windows Form verfügt nicht über die gleiche Architektur wie Nachrichtenschleifen, die frühere Anwendungen wie Visual Basic 6.0-Anwendungen und MFC-Anwendungen bereitstellen. Die Fensternachrichten, die in der Nachrichtenschleife gepostet werden, können anders behandelt werden, als es das Windows-Formular erwartet. Daher kann ein unerwartetes Verhalten auftreten. Einige Tastenkombinationen funktionieren möglicherweise nicht, einige Mausaktivitäten funktionieren möglicherweise nicht, oder einige Ereignisse werden möglicherweise nicht wie erwartet ausgelöst.
Beheben von Interoperabilitätsproblemen
Sie können diese Probleme beheben, indem Sie das Formular in einer .NET Framework-Nachrichtenschleife anzeigen, die mithilfe der Application.Run-Methode erstellt wird.
Damit ein Windows Form-Formular von einer COM-Clientanwendung ordnungsgemäß funktioniert, müssen Sie es in einer Windows Forms-Nachrichtenschleife ausführen. Verwenden Sie dazu einen der folgenden Ansätze:
Verwenden Sie die Form.ShowDialog-Methode, um das Windows Form-Formular anzuzeigen. Weitere Informationen finden Sie unter Wie man: COM-Interop durch Anzeigen eines Windows-Formulars mit der ShowDialog-Methode unterstützt.
Zeigen Sie jedes Windows Form-Formular in einem neuen Thread an. Weitere Informationen finden Sie unter So unterstützen Sie COM-Interop, indem Sie jedes Windows-Formular in einem eigenen Thread anzeigen.
Siehe auch
- Windows Forms und unverwaltete Anwendungen
- COM-Interop-
- COM-Interoperabilität in .NET Framework-Anwendungen
- Beispiele für COM-Interoperabilität
- Aximp.exe (Windows Forms ActiveX-Steuerelement-Importer)
- Verfügbarmachen von .NET Framework-Komponenten für COM
- Verpacken einer Assembly für COM
- Registrieren von Assemblys mit COM-
- So wird's gemacht: COM-Interop unterstützen, indem ein Windows-Formular mit der Methode ShowDialog angezeigt wird
- So geht's: COM-Interop unterstützen, indem jedes Windows-Formular in einem eigenen Thread angezeigt wird
.NET Desktop feedback