O controle de usuário do ActiveX não estiver visível no criador de formulários quando você reabrir um projeto existente

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 818220
Sintomas
Quando você reabrir um aplicativo existente do Windows no Visual Studio .NET ou Visual Studio 2005, um controle de usuário anteriormente visível do ActiveX não pode estar visível no Windows Form Designer. Além disso, quando você tenta compilar o projeto, você pode receber erros semelhantes à seguinte:
Tipo 'AxProject1.AxTestControl' não está definido.
O componente referenciado 'AxProject1' não foi encontrado. Um wrapper do assembly .NET para a biblioteca de tipos dependente 'Projeto1' não pôde ser encontrado.
Causa
Quando você adiciona um controle de usuário do ActiveX para um projeto Visual Studio.NET ou Visual Studio 2005, Visual Studio .NET ou Visual Studio 2005 internamente inicia a ferramenta Importador de controle ActiveX do Windows Forms (aximp.exe). Aximp.exe converte a biblioteca de tipos do ActiveX controle de usuário e gera os dois seguintes arquivos:
  • Um proxy de tempo de execução de linguagem comuns para tipos COM.
  • Um proxy de Windows Forms para o controle de usuário do ActiveX.
Esses arquivos de dois proxy têm informações relacionadas ao controle de usuário existente do ActiveX.

Quando você adiciona um membro público no controle de usuário existente do ActiveX, como um evento, método ou propriedade, e em seguida, você recompilar o controle de usuário do ActiveX, um ou mais membros públicos são adicionados à interface do usuário controle ActiveX. No entanto, o arquivo de proxy de tempo de execução de idioma comum não é atualizado com essas novas informações. Portanto, o ActiveX controle de usuário não é gerado corretamente no Windows Form Designer, o Windows Forms correspondente proxy não é atualizado ou, e ocorrerá o comportamento discutido na seção "Sintomas" deste artigo.

Observação Na caixa de diálogo Propriedades do projeto, você pode clique na guia Component e, em seguida selecione a opção Binary Compatibility antes de recompilar o controle de usuário existente do ActiveX no Microsoft Visual Basic 6.0. Nesse caso, embora o proxy de tempo de execução de linguagem comuns é atualizado, o proxy de Windows Forms não é atualizado. Isso resulta nos mesmos sintomas.
Como Contornar
Para contornar esse problema, remova as referências do ActiveX controle de usuário existentes e adicione as referências atualizadas novamente. Para fazer isso, siga um dos seguintes métodos.

Método 1

  1. No Solution Explorer, em referências , clique com o botão direito do mouse AxProject1 e, em seguida, clique em Remover .
  2. Em referências , clique com o botão direito do mouse Projeto1 e, em seguida, clique em Remover .
  3. Na caixa de ferramentas, clique duas vezes Project1.TestControl para adicionar o controle de usuário ActiveX modificado para o formulário.

    Observe que o usuário ActiveX controle do Windows Form Designer e as referências para AxProject1 e Projeto1 aparecem em referências para UserControlDemo .
  4. No menu Build , clique em Build Solution .

    Você não receber quaisquer erros.
Observação Se você usar essa solução alternativa, o controle de usuário modificado do ActiveX é adicionado ao seu formulário como AxTestControl2 e o formulário ainda tem um código que está relacionado a AxTestControl1 . Por exemplo, a instrução a seguir é ainda estiver presente, embora AxTestControl1 não seja em seu formulário:

código de exemplo do Visual Basic .NET
Friend WithEvents AxTestControl1 As AxProject1.AxTestControl
código de exemplo do Visual translation from VPE for Csharp .NET
private AxProject1.AxTestControl axTestControl1;
Se você usou AxTestControl1 em outro lugar em seu código, e você não criou explicitamente uma instância de um objeto AxProject1.AxTestControl , você pode receber uma
'NullReferenceException'
erro.

Além disso, se você tiver vários formulários com uma instância do controle de usuário do ActiveX, você deve repetir as etapas anteriores para cada formulário.

Método 2

  1. No Solution Explorer, em referências , clique com o botão direito do mouse AxProject1 e, em seguida, clique em Remover .
  2. Em referências , clique com o botão direito do mouse Projeto1 e, em seguida, clique em Remover .
  3. Abra o prompt de comando Visual Studio .NET ou Visual Studio 2005 e altere o caminho do diretório para o diretório bin do UserControlDemo .
  4. Digite o seguinte comando e, em seguida, pressione a tecla ENTER para executar aximp.exe explicitamente gerar um proxy de tempo de execução de idioma comum e um proxy de Windows Forms:

    aximp "<FilePath > \Project1.ocx "/out:AxInterop.Project1.dll

    AxInterop.Project1.dll e Project1.dll são gerados no diretório bin.

    Observação Substitua o caminho do diretório que contém Project1.ocx FilePath.
  5. Alterne para o Visual Studio .NET ou Visual Studio 2005. No menu Project , clique em Add Reference .
  6. Na caixa de diálogo Add Reference que aparece, clique em Procurar .
  7. Localize AxInterop.Project1.dll e Project1.dll e, em seguida, selecione-os.
  8. Clique em Abrir e, em seguida, clique em OK para adicionar essas referências para seu projeto.
  9. Feche e reabra o Windows Form Designer.

    Observe o controle de usuário ActiveX modificado no Windows Form Designer.

    Observação Ao contrário na solução alternativa anterior, o controle de usuário do ActiveX modificado ainda é chamado AxTestControl1 . Portanto, não é nenhum código desnecessário.
  10. No menu Build , clique em Build Solution .

    Você não receber quaisquer erros.
Observação Essas etapas sejam baseiam a amostra de "Mais informações" seção. Portanto, as entidades mencionadas dessas tarefas podem diferir das entidades no seu projeto, depending on sua implementação.
Situação
Esse comportamento é por design.
Mais Informações

Passos para reproduzir o problema

  1. Abra o Visual Basic 6.0 e, em seguida, crie um controle ActiveX projeto.
  2. Na janela Properties, altere o Name para TestControl .
  3. No menu Exibir , clique em código e, em seguida, adicione o seguinte código:
    Public Sub Method1()   MsgBox ("Method 1")End Sub
  4. No menu arquivo , clique em Criar Project1.ocx e, em seguida, clique em OK na caixa de diálogo Criar projeto que aparece.
  5. Abra Visual Studio .NET ou Visual Studio 2005. Criar um aplicativo do Windows chamado UserControlDemo usando Visual Basic. NET, Visual Basic 2005 ou Visual translation from VPE for Csharp .NET.
  6. No Visual Studio .NET 2003, clique em Adicionar ou remover itens da caixa de ferramentas no menu Ferramentas .

    No Visual Studio .NET 2002, clique em Customize Toolbox no menu Ferramentas .


    No Visual Studio.2005, clique em Choose Toolbox Items no menu Ferramentas .
  7. Clique na guia Componentes COM e, em seguida, clique em Procurar .
  8. Localize Project1.ocx (criado na etapa 4) e selecione-o.
  9. Clique em Abrir e, em seguida, clique em OK para adicionar Project1.TestControl à caixa de ferramentas.
  10. Na caixa de ferramentas, clique duas vezes Project1.TestControl para adicionar AxTestControl1 ao formulário.

    As referências para AxProject1 e Projeto1 automaticamente aparecem em referências para UserControlDemo .
  11. No menu Build , clique em Build Solution .
  12. Salve o projeto e feche o Visual Studio .NET ou Visual Studio 2005.
  13. Alterne para Visual Basic 6.0 e, em seguida, adicionar um evento público, método ou propriedade para TestControl . Por exemplo, acrescentar o código a seguir para TestControl :
    Public Sub Method2()   MsgBox ("Method 2")End Sub
  14. No menu Project , clique em Propriedades de Projeto1 .
  15. No Projeto1 - propriedades caixa de diálogo que aparece, clique para selecionar componente .
  16. Em Version Compatibility , clique para selecionar Binary Compatibility e, em seguida, clique em OK .

    Observação Etapa 14 até a etapa 16 descrevem como selecionar a opção Binary Compatibility antes de recompilar o controle de usuário do ActiveX.
  17. No menu arquivo , clique em tornar Project1.ocx .
  18. Clique em Sim quando são solicitado para substituir o arquivo existente.
  19. Abra o Visual Studio .NET ou Visual Studio 2005 e UserControlDemo .

    Observe que TestControl1 não é visível no Windows Form Designer.
  20. No menu Build , clique em Build Solution .

    Você receber erros mencionados na "Sintomas" seção deste artigo.
Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft: Para obter mais informações, visite os seguintes sites da MSDN:
Visão geral sobre controles de Microsoft ActiveX
http://msdn2.microsoft.com/en-us/library/ms968501.aspx
Windows Importador de controle ActiveX Forms (aximp.exe)
http://msdn2.microsoft.com/en-us/library/8ccdh774(vs.71).aspx
Binary Compatibility Changes in Visual Basic
http://msdn2.microsoft.com/en-us/library/a6xdzb3y(vs.71).aspx

Propriedades

ID do Artigo: 818220 - Última Revisão: 12/03/2007 18:50:53 - Revisão: 3.11

Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0, Microsoft Visual Studio .NET 2003 Academic Edition, Microsoft Visual Studio .NET 2003 Enterprise Architect, Microsoft Visual Studio .NET 2003 Enterprise Developer, Microsoft Visual Studio .NET 2003 Professional Edition, Microsoft Visual Studio .NET 2002 Academic Edition, Microsoft Visual Studio .NET 2002 Enterprise Architect, Microsoft Visual Studio .NET 2002 Enterprise Developer, Microsoft Visual Studio .NET 2002 Professional Edition, Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft .NET Framework 2.0

  • kbmt kbvs2005swept kbvs2005applies kbideproject kbide kbcomctrls kbctrlcreate kbctrl kbcontrol kbcominterop kbprb KB818220 KbMtpt
Comentários