Ü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:

Siehe auch

Aufgaben

Gewusst wie: Unterstützen von COM-Interop durch Anzeigen eines Windows Forms mit der ShowDialog-Methode

Gewusst wie: Unterstützen von COM-Interop durch das Anzeigen einzelner Windows Forms in einem eigenen Thread

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

COM-Interop (Visual Basic)

Erweiterte COM-Interoperabilität

COM-Interoperabilität in .NET Framework-Anwendungen (Visual Basic)

COM Interoperability Samples