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:

Zobacz też