Общие сведения о Windows Forms и неуправляемых приложениях
Приложения и элементы управления Windows Forms могут взаимодействовать с неуправляемыми приложениями, но с некоторыми оговорками. В следующих разделах описываются сценарии и конфигурации, которые поддерживаются и не поддерживаются элементами управления и приложениями Windows Forms.
Элементы управления Windows Forms и приложения ActiveX
За исключением Microsoft Internet Explorer и Microsoft Foundation Classes (MFC), элементы управления Windows Forms не поддерживаются в приложениях, предназначенных для размещения элементов управления ActiveX. Другие приложения и средства разработки, способные размещать элементы управления ActiveX, включая контейнеры для тестирования ActiveX из версий Visual Studio, предшествующих Visual Studio .NET 2003, не поддерживают размещение элементов управления Windows Forms.
Эти ограничения также применимы к использованию элементов управления Windows Forms посредством COM-взаимодействия. Использование элемента управления Windows Forms с помощью вызываемой оболочки COM (CCW) поддерживается только в Internet Explorer. Подробнее о COM-взаимодействии см. в разделе
В таблице ниже показаны доступные средства размещения ActiveX для элементов управления Windows Forms.
Версия Windows Forms | Поддержка |
---|---|
.NET Framework 1.0 | Internet Explorer 5.01 и более поздние версии |
.NET Framework 1.1 и более поздние версии | Internet Explorer 5.01 и более поздние версии Microsoft Foundation Classes (MFC) 7.0 и более поздние версии |
Размещение компонентов Windows Forms в качестве элементов управления ActiveX
В .NET Framework 1.1 поддержка была расширена для включения MFC 7.0 и более поздних версий. Эта поддержка включает в себя любой контейнер, полностью совместимый с MFC 7.0 или с более поздней версией контейнера элементов управления ActiveX.
Однако регистрация элементов управления Windows Forms как элементов управления ActiveX не поддерживается. Также не поддерживается вызов метода com.ms.win32.Ole32.CoCreateInstance
для элементов управления Windows Forms. Поддерживается только управляемая активация элементов управления Windows Forms. После создания элемента управления Windows Forms его можно размещать в приложении MFC так же, как элемент управления ActiveX.
Чтобы использовать элементы управления Windows Forms в неуправляемом приложении, необходимо либо разместить среду CLR с помощью неуправляемых интерфейсов API размещения среды CLR, либо использовать возможности взаимодействия C++. Рекомендуемым решением является использование возможностей взаимодействия C++.
Windows Forms в клиентских приложениях COM
При открытии формы Windows Forms из клиентского приложения COM, такого как приложение Visual Basic 6.0 или приложение MFC, форма может вести себя не так, как ожидается. Например, при нажатии клавиши TAB фокус не переходит от одного элемента управления к другому. При нажатии клавиши ВВОД, если фокус установлен на кнопке, событие кнопки Click не возникает. Также может наблюдаться и другое неожиданное поведение при нажатии клавиш или действиях мышью.
Это происходит из-за того, что неуправляемое приложение не реализует поддержку цикла обработки сообщений, которая необходима для правильной работы формы Windows Forms. Цикл обработки сообщений, реализуемый в клиентском приложении COM, существенно отличается от цикла обработки сообщений Windows Forms.
Цикл обработки сообщений приложения является внутренним циклом программы, который получает сообщения из очереди сообщений потока, преобразует их и отправляет приложению для обработки. Архитектура цикла обработки сообщений для формы Windows Forms отличается от архитектуры, используемой в более ранних приложениях, таких как приложения Visual Basic 6.0 и приложения MFC. Сообщения окна, которые отправляются в цикл обработки сообщений, могут обрабатываться не так, как ожидает форма Windows Forms. Таким образом, может наблюдаться неожиданное поведение. Могут не работать некоторые сочетания клавиш и некоторые действия мыши, а также могут не возникать некоторые события.
Устранение проблем взаимодействия
Эти проблемы можно устранить путем отображения формы в цикле обработки сообщений .NET Framework , который создается с помощью метода Application.Run .
Чтобы исправить работу формы Windows Forms из клиентского приложения COM, необходимо запустить его в цикле обработки сообщений Windows Forms. Для этого воспользуйтесь одним из перечисленных ниже подходов.
Используйте метод Form.ShowDialog для отображения Windows Form. Дополнительные сведения см. в разделе Как Поддержка COM-взаимодействия путем отображения формы Windows Forms с помощью метода ShowDialog.
Запускайте каждую форму Windows Forms в новом потоке. Дополнительные сведения см. в разделе Как Поддержка COM-взаимодействия путем отображения каждой формы Windows Forms в отдельном потоке.
См. также
- Windows Forms и неуправляемые приложения
- COM-взаимодействие
- COM-взаимодействие в приложениях .NET Framework
- Примеры COM-взаимодействия
- Aximp.exe (программа импорта элементов ActiveX форм Windows)
- Предоставление COM-клиентам доступа к компонентам .NET Framework
- Упаковка сборки для модели COM
- Регистрация сборок в COM
- Практическое руководство. Обеспечение поддержки COM-взаимодействия путем отображения формы Windows Forms с помощью метода ShowDialog
- Практическое руководство. Поддержка COM-взаимодействия путем отображения каждой формы Windows Forms в отдельном потоке