Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 interopu modelu obiektów składników COM. Korzystanie z kontrolki Windows Forms za pośrednictwem opakowania wywoływalnego COM (CCW) jest obsługiwane tylko w programie Internet Explorer. Aby uzyskać więcej informacji na temat międzyoperacyjności COM, zobacz
W poniższej tabeli przedstawiono dostępną obsługę hostingu ActiveX dla kontrolek Windows Forms.
| Wersja formularzy systemu Windows | Wsparcie |
|---|---|
| .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 w roli 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 TAB fokus nie zmienia się z jednej kontrolki na inną. Gdy naciśniesz klawisz ENTER, a przycisk polecenia ma fokus, zdarzenie przycisku Click nie jest wywoływane. Może również wystąpić nieoczekiwane zachowanie w przypadku naciśnięć 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 skierowane do pętli komunikatów mogą być obsługiwane w sposób inny niż przewiduje Formularz Windows. W związku z tym może wystąpić nieoczekiwane zachowanie. Niektóre kombinacje naciśnięć 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 przy użyciu metody Application.Run.
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:
Użyj metody Form.ShowDialog, aby wyświetlić formularz systemu Windows. Aby uzyskać więcej informacji, zobacz Jak obsługiwać współpracę COM poprzez wyświetlenie formularza 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 także
- Formularze systemu Windows i aplikacje niezarządzane
- Interop COM
- Współdziałanie modelu COM w aplikacjach .NET Framework
- Przykłady współdziałania modelu COM
- Aximp.exe (Importer kontrolek ActiveX formularzy systemu Windows)
- Udostępnianie składników .NET Framework dla COM
- Pakowanie pakietu do COM
- Rejestrowanie zestawów w COM
- Jak wspierać interop COM, wyświetlając formularz systemu Windows metodą ShowDialog
- Instrukcje: obsługa międzyoperajności modelu COM przez wyświetlanie każdego formularza systemu Windows we własnym wątku
.NET Desktop feedback