Przegląd formularzy systemu Windows i niezarządzanych aplikacji
Aplikacje i kontrolki windows Forms mogą współdziałać z aplikacjami niezarządzanymi, z pewnymi zastrzeżeniami. W poniższych sekcjach opisano scenariusze i konfiguracje obsługiwane przez aplikacje i kontrolki windows Forms oraz te, które nie są obsługiwane.
Kontrolki formularzy systemu Windows i aplikacje ActiveX
Z wyjątkiem programów Microsoft Internet Explorer i Microsoft Foundation Classes (MFC) kontrolki Windows Forms nie są obsługiwane w aplikacjach przeznaczonych do hostowania kontrolek ActiveX. Inne aplikacje i narzędzia programistyczne, które mogą hostować kontrolki ActiveX, w tym kontenery testów ActiveX z wersji programu Visual Studio starszych niż Visual Studio .NET 2003, nie są obsługiwanymi hostami dla kontrolek Windows Forms.
Te ograniczenia dotyczą również korzystania z kontrolek formularzy systemu Windows za pośrednictwem międzyoperacjności modelu obiektów składników MODELU COM. Korzystanie z kontrolki Windows Forms za pośrednictwem otoki wywoływanej modelu COM (CCW) jest obsługiwane tylko w programie Internet Explorer. Aby uzyskać więcej informacji na temat międzyoperajności modelu COM, zobacz
Międzyoperajności MODELU COM.
W poniższej tabeli przedstawiono dostępną obsługę hostingu ActiveX dla kontrolek Windows Forms.
Wersja formularzy systemu Windows | Pomoc techniczna |
---|---|
.NET Framework w wersji 1.0 | Internet Explorer 5.01 i nowsze wersje |
.NET Framework w wersji 1.1 lub nowszej | Internet Explorer 5.01 i nowsze wersje Klasy programu Microsoft Foundation (MFC) 7.0 lub nowsze |
Hostowanie składników windows Forms jako kontrolek ActiveX
W programie .NET Framework 1.1 rozszerzono obsługę MFC 7.0 i nowszych wersji. Ta obsługa obejmuje każdy kontener, który jest w pełni zgodny z kontenerem kontrolek MFC 7.0 i nowszym activex.
Jednak rejestracja kontrolek Windows Forms jako kontrolek ActiveX nie jest obsługiwana. Ponadto wywoływanie com.ms.win32.Ole32.CoCreateInstance
metody dla kontrolek Windows Forms nie jest obsługiwane. Obsługiwana jest tylko zarządzana aktywacja kontrolek Windows Forms. Po utworzeniu kontrolki Formularze systemu Windows można hostować ją w aplikacji MFC tak samo jak w przypadku kontrolki ActiveX.
Aby używać kontrolek Windows Forms w aplikacji niezarządzanej, musisz hostować środowisko CLR przy użyciu niezarządzanych interfejsów API hostingu CLR lub korzystać z funkcji międzyoperacyjności języka C++. Korzystanie z funkcji międzyoperacyjności języka C++ jest zalecanym rozwiązaniem.
Windows Forms w aplikacjach klienckich COM
Po otwarciu formularza systemu Windows z aplikacji klienckiej COM, takiej jak aplikacja Visual Basic 6.0 lub aplikacja MFC, formularz może zachowywać się nieoczekiwanie. Na przykład po naciśnięciu klawisza TAB fokus nie zmienia się z jednej kontrolki na inną. Po naciśnięciu klawisza ENTER, gdy przycisk polecenia ma fokus, zdarzenie przycisku Click nie jest wywoływane. Może również wystąpić nieoczekiwane zachowanie w przypadku naciśnięć klawiszy lub działania myszy.
To zachowanie występuje, ponieważ niezarządzana aplikacja nie implementuje obsługi pętli komunikatów, która wymaga poprawnego działania formularzy systemu Windows. Pętla komunikatów dostarczana przez aplikację kliencka COM różni się zasadniczo od pętli komunikatów windows Forms.
Pętla komunikatów aplikacji to wewnętrzna pętla programu, która pobiera komunikaty z kolejki komunikatów wątku, tłumaczy je, a następnie wysyła je do aplikacji do obsłużenia. Pętla komunikatów formularza systemu Windows nie ma tej samej architektury co pętle komunikatów, które udostępniają wcześniejsze aplikacje, takie jak aplikacje Visual Basic 6.0 i aplikacje MFC. Komunikaty okna publikowane w pętli komunikatów mogą być obsługiwane inaczej niż oczekiwano w formularzu systemu Windows. W związku z tym może wystąpić nieoczekiwane zachowanie. Niektóre kombinacje naciśnięć klawiszy mogą nie działać, niektóre działania myszy mogą nie działać lub niektóre zdarzenia mogą nie być wywoływane zgodnie z oczekiwaniami.
Rozwiązywanie problemów z współdziałaniem
Te problemy można rozwiązać, wyświetlając formularz w pętli komunikatów programu .NET Framework, która jest tworzona Application.Run przy użyciu metody .
Aby formularz systemu Windows działał poprawnie z poziomu aplikacji klienckiej COM, należy uruchomić go w pętli komunikatów windows Forms. W tym celu należy użyć jednej z następujących metod:
Form.ShowDialog Użyj metody , aby wyświetlić formularz systemu Windows. Aby uzyskać więcej informacji, zobacz How to: Support COM Interop by Displaying a Windows Form with the ShowDialog Method (Jak obsługiwać międzyoperajności modelu COM przez wyświetlanie formularza systemu Windows za pomocą metody ShowDialog).
Wyświetl każdy formularz systemu Windows w nowym wątku. Aby uzyskać więcej informacji, zobacz How to: Support COM Interop by Displaying Each Windows Form on its own Thread (Instrukcje: obsługa międzyoperajności modelu COM przez wyświetlanie każdego formularza systemu Windows we własnym wątku).
Zobacz też
- Formularze Windows Forms i niezarządzane aplikacje
- Usługa międzyoperacyjna modelu COM
- Współdziałanie COM w aplikacjach .NET Framework
- Przykłady współdziałania modelu COM
- Aximp.exe (importer kontrolki ActiveX formularzy Windows Forms)
- Udostępnianie składników .NET Framework modelowi COM
- Pakowanie zestawu dla modelu COM
- Rejestrowanie zestawów do użycia z modelem COM
- Instrukcje: obsługa międzyoperacyjności w modelu COM za pomocą wyświetlania formularzy systemu Windows przy użyciu metody ShowDialog
- Instrukcje: obsługa międzyoperacyjności modelu COM za pomocą wyświetlania każdego formularza systemu Windows w jego własnym wątku
.NET Desktop feedback
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla