Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os aplicativos e controles do Windows Forms podem interoperar com aplicativos não gerenciados, com algumas ressalvas. As seções a seguir descrevem os cenários e configurações que os aplicativos e controles do Windows Forms dão suporte e aqueles que eles não dão suporte.
Controles do Windows Forms e aplicativos ActiveX
Com exceção do Microsoft Internet Explorer e do Microsoft Foundation Classes (MFC), os controles do Windows Forms não têm suporte em aplicativos projetados para hospedar controles ActiveX. Outros aplicativos e ferramentas de desenvolvimento capazes de hospedar controles ActiveX, incluindo os contêineres de teste ActiveX de versões do Visual Studio anteriores ao Visual Studio .NET 2003, não têm suporte para hosts para controles do Windows Forms.
Essas restrições também se aplicam ao uso de controles do Windows Forms por meio da interoperabilidade COM (Component Object Model). Há suporte para o uso de um controle do Windows Forms por meio de um CCW de COM (COM callable wrapper) somente no Internet Explorer. Para obter mais informações sobre a interoperabilidade COM, consulte
A tabela a seguir mostra o suporte de hospedagem ActiveX disponível para controles do Windows Forms.
Versão do Windows Forms | Apoio |
---|---|
.NET Framework versão 1.0 | Internet Explorer 5.01 e versões posteriores |
.NET Framework versão 1.1 e posterior | Internet Explorer 5.01 e versões posteriores Microsoft Foundation Classes (MFC) 7.0 e posterior |
Hospedando componentes do Windows Forms como controles ActiveX
No .NET Framework 1.1, o suporte foi estendido para incluir o MFC 7.0 e versões posteriores. Esse suporte inclui qualquer contêiner totalmente compatível com o contêiner de controle MFC 7.0 e posterior do ActiveX.
No entanto, não há suporte para o registro de controles do Windows Forms como controles ActiveX. Além disso, não há suporte para chamar o método com.ms.win32.Ole32.CoCreateInstance
para controles do Windows Forms. Há suporte apenas para ativação gerenciada de controles do Windows Forms. Depois de criar um controle do Windows Forms, você pode hospedá-lo em um aplicativo MFC, assim como com um controle ActiveX.
Para usar controles do Windows Forms em seu aplicativo não gerenciado, você deve hospedar o CLR usando as APIs de hospedagem CLR não gerenciadas ou usar os recursos de interoperabilidade do C++. Usar os recursos de interoperabilidade do C++ é a solução recomendada.
Windows Forms em aplicativos cliente COM
Quando você abre um Windows Form de um aplicativo cliente COM, como um aplicativo Visual Basic 6.0 ou um aplicativo MFC, o formulário pode se comportar inesperadamente. Por exemplo, quando você pressiona a tecla TAB, o foco não muda de um controle para outro. Quando você pressiona a tecla ENTER enquanto um botão de comando tem foco, o evento Click do botão não é acionado. Você também pode experimentar um comportamento inesperado para pressionamentos de teclas ou atividade do mouse.
Esse comportamento ocorre porque o aplicativo não gerenciado não implementa o suporte ao loop de mensagens que o Windows Forms requer para funcionar corretamente. O loop de mensagem fornecido pelo aplicativo cliente COM é fundamentalmente diferente do loop de mensagens do Windows Forms.
O loop de mensagem de um aplicativo é um loop de programa interno que recupera mensagens da fila de mensagens de um thread, as converte e as envia para o aplicativo a ser manipulado. O loop de mensagens de um Windows Form não tem a mesma arquitetura que os loops de mensagem que os aplicativos anteriores, como aplicativos do Visual Basic 6.0 e aplicativos MFC, fornecem. As mensagens de janela que são postadas no loop de mensagem podem ser tratadas de forma diferente do que o Windows Form espera. Portanto, pode ocorrer um comportamento inesperado. Algumas combinações de pressionamento de tecla podem não funcionar, algumas atividades do mouse podem não funcionar ou alguns eventos podem não ser gerados conforme o esperado.
Resolvendo problemas de interoperabilidade
Você pode resolver esses problemas exibindo o formulário em um loop de mensagem do .NET Framework, que é criado usando o método Application.Run.
Para fazer um Windows Form funcionar corretamente de um aplicativo cliente COM, você deve executá-lo em um loop de mensagem do Windows Forms. Para fazer isso, use uma das seguintes abordagens:
Use o método Form.ShowDialog para exibir o Windows Form. Para obter mais informações, consulte Como dar suporte à interoperabilidade COM exibindo um formulário do Windows com o método ShowDialog.
Exiba cada Formulário do Windows em um novo thread. Para obter mais informações, consulte Como dar suporte à interoperabilidade COM exibindo cada formulário do Windows em seu próprio thread.
Consulte também
- Windows Forms e Aplicativos Não Gerenciados
- Interoperabilidade COM
- Interoperabilidade COM em Aplicativos .NET Framework
- Exemplos de interoperabilidade COM
- Aximp.exe (Importador de Controle ActiveX do Windows Forms)
- Expondo componentes do .NET Framework ao COM
- Empacotando um assembly para COM
- Registrando assemblies usando COM
- Como dar suporte à interoperabilidade COM exibindo um formulário do Windows com o método ShowDialog
- Como dar suporte à interoperabilidade COM exibindo cada formulário do Windows em seu próprio thread
.NET Desktop feedback