Información general sobre formularios Windows Forms y aplicaciones no administradas
Actualización: noviembre 2007
Las aplicaciones y controles de formularios Windows Forms pueden interoperar con aplicaciones no administradas, con algunas excepciones. En las secciones siguientes se describen los escenarios y configuraciones que las aplicaciones y controles de formularios Windows Forms admiten y aquéllos que no admiten.
Controles de formularios Windows Forms y aplicaciones ActiveX
Con la excepción de Microsoft Internet Explorer y Microsoft Foundation Classes (MFC), no se admiten controles de formularios Windows Forms en aplicaciones diseñadas para alojar controles ActiveX. Otras aplicaciones y herramientas de desarrollo que pueden alojar controles ActiveX, incluidos los contenedores de prueba de ActiveX de versiones de Visual Studio que son anteriores a Visual Studio .NET 2003, no son host admitidos para controles de formularios Windows Forms.
Estas restricciones también se aplican al uso de controles de formularios Windows Forms a través de la interoperabilidad del Modelo de objetos componentes (COM). El uso de controles de formularios Windows Forms a través de contenedores invocables desde COM (CCW) sólo se admite en Internet Explorer. Para obtener más información sobre la interoperabilidad COM, vea
Interoperabilidad COM y Interoperabilidad COM avanzada.
En la tabla siguiente se muestra la compatibilidad con alojamiento de ActiveX disponible para los controles de formularios Windows Forms.
Versión de formulario Windows Forms |
Compatibilidad |
---|---|
.NET Framework versión 1.0 |
Internet Explorer versión 5.01 y posteriores |
.NET Framework versión 1.1 y posteriores |
Internet Explorer versión 5.01 y posteriores Microsoft Foundation Classes (MFC) 7.0 y posteriores |
Alojar los componentes de formularios Windows Forms como controles ActiveX
En .NET Framework 1.1, se ha ampliado la compatibilidad para incluir MFC 7.0 y versiones posteriores. Esta compatibilidad incluye cualquier contenedor que sea totalmente compatible con MFC 7.0 y el contenedor de controles ActiveX posterior.
Sin embargo, no se admite el registro de controles de formularios Windows Forms como controles ActiveX. Tampoco se admite llamar al método com.ms.win32.Ole32.CoCreateInstance para controles de formularios Windows Forms. Se admite sólo la activación administrada de controles de formularios Windows Forms. Cuando crea un control de formularios Windows Forms, puede alojarlo en una aplicación MFC del mismo modo que un control ActiveX.
Para utilizar controles de formularios Windows Forms en la aplicación no administrada, debe alojar el CLR utilizando las API que alojan el CLR no administrado o utilizar las características de interoperabilidad de C++. La solución recomendada es utilizar las características de interoperabilidad de C++.
Formularios Windows Forms en aplicaciones cliente COM
Cuando abre un formulario Windows Forms de una aplicación cliente COM, como una aplicación Visual Basic 6.0 o una aplicación MFC, quizá el formulario se comporte de forma inesperada. Por ejemplo, cuando presiona la tecla TAB, el foco no cambia de un control a otro. Si presiona la tecla ENTRAR cuando un botón de comando tiene el foco, no se provoca el evento Click del botón. También puede experimentar un comportamiento inesperado por presiones de tecla o actividad del mouse.
Este comportamiento aparece porque la aplicación no administrada no implementa la compatibilidad del bucle de mensajes que Windows Forms requiere para funcionar correctamente. El bucle de mensajes proporcionado por la aplicación cliente COM es fundamentalmente diferente del bucle de mensajes de Windows Forms.
Un bucle de mensajes de aplicación es un bucle de programa interno que recupera mensajes de una Message Queue de subproceso, los traduce y luego los envía a la aplicación donde se van a controlar. El bucle de mensajes de un formulario Windows Forms no tiene la misma arquitectura que los bucles de mensajes que aplicaciones anteriores, como aplicaciones Visual Basic 6.0 y aplicaciones MFC, proporcionan. Quizá los mensajes de ventana que se envían al bucle de mensajes se controlen de manera diferente a la que se espera en Windows Forms. Por consiguiente, puede producirse un comportamiento inesperado. Quizá algunas combinaciones de presiones de tecla o la actividad del mouse no funcionen o puede que algunos eventos no se provoquen como se esperaba.
Resolver problemas de interoperabilidad
Puede resolver este tipo de problemas mostrando el formulario en un bucle de mensajes .NET Framework, que se crea con el método Application.Run.
Para que un formulario Windows Forms funcione correctamente desde una aplicación cliente COM, debe ejecutarlo en un bucle de mensajes de formularios Windows Forms. Para ello, utilice uno de los enfoques siguientes:
Utilice el método Form.ShowDialog para mostrar el formulario Windows Forms. Para obtener más información, vea Cómo: Admitir la interoperabilidad COM al mostrar un formulario Windows Forms con el método ShowDialog.
Muestre cada formulario Windows Forms en un nuevo subproceso. Para obtener más información, vea Cómo: Admitir la interoperabilidad COM al mostrar cada formulario Windows Forms en su propio subproceso.
Cree un bucle de mensajes compartido en un nuevo subproceso del componente .NET Framework. Para obtener más información, vea Cómo: Admitir la interoperabilidad COM al mostrar formularios Windows Forms en un subproceso compartido.
Vea también
Tareas
Conceptos
Exponer componentes de .NET Framework en COM
Empaquetar un ensamblado para COM
Referencia
Importador de controles ActiveX de formularios Windows Forms (Aximp.exe)
Otros recursos
Aplicaciones de Windows Forms y aplicaciones no administradas
Interoperabilidad COM avanzada