Artigo: 818220 - Última revisão: segunda-feira, 3 de Dezembro de 2007 - Revisão: 3.11

O controlo ActiveX de utilizador não estiver visível no estruturador de formulário quando voltar a abrir um projecto existente

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Quando voltar a abrir uma aplicação do Windows existente no Visual Studio .NET ou Visual Studio 2005, um controlo de utilizador de ActiveX anteriormente visível poderá não estar visível no Designer de formulários do Windows. Além disso, quando tenta compilar o projecto, poderá receber erros semelhantes ao seguinte:
Tipo 'AxProject1.AxTestControl' não está definido.
Não foi possível encontrar o componente referenciado 'AxProject1'. Um wrapper de assemblagem .NET para a biblioteca de tipos dependente não foi possível encontrar 'Projeto1'.

Causa

Quando adicionar um controlo ActiveX do utilizador a um projecto Visual Studio .NET ou Visual Studio 2005, Visual Studio .NET ou Visual Studio 2005 internamente inicia a ferramenta de importação de controlo ActiveX do Windows formulários (aximp.exe). Aximp.exe converte a biblioteca de tipos de ActiveX do controlo de utilizador e gera os seguintes dois ficheiros:
  • Proxy runtime idioma comum para tipos COM.
  • Um proxy de Windows Forms para o controlo ActiveX de utilizador.
Estes ficheiros de duas proxy têm informações relacionadas com o controlo de utilizador de ActiveX existente.

Quando adicionar um membro público ao controlo de ActiveX de utilizador existente, tal como um evento, método ou propriedade, e, em seguida, recompile o controlo ActiveX de utilizador, um ou mais membros públicos são adicionados à interface do utilizador controlo ActiveX. No entanto, o ficheiro de proxy de runtime de idioma comum não é actualizado com estas novas informações. Por conseguinte, o ActiveX controlo de utilizador não é gerado correctamente no Designer de formulários do Windows, Windows Forms correspondente proxy não é actualizada e ocorrerá o comportamento abordado na secção "Sintomas" deste artigo.

Nota Na caixa de diálogo Propriedades do projecto, pode clique no separador componentes e seleccione a opção Binário compatibilidade antes de recompilar o controlo de utilizador ActiveX existente no Microsoft Visual Basic 6.0. Neste caso, ainda que o proxy de runtime de idioma comum é actualizado, o proxy de formulários do Windows não é actualizado. Isto resulta nos mesmos sintomas.

Como contornar

Para contornar este problema, remover as referências do controlo ActiveX utilizador existentes e, em seguida, adicione as referências actualizadas novamente. Para o fazer, siga um dos seguintes métodos.

Método 1

  1. No Solution Explorer, referências , clique com o botão direito do rato AxProject1 e, em seguida, clique em Remover .
  2. Em referências , clique com o botão direito do rato Projeto1 e, em seguida, clique em Remover .
  3. Na caixa de ferramentas, faça duplo clique Project1.TestControl para adicionar o controlo de utilizador de ActiveX modificado o formulário.

    Repare que o utilizador de ActiveX controlar no Criador de formulários do Windows e as referências ao AxProject1 e Projeto1 apresentado em References UserControlDemo .
  4. No menu criar , clique em criar soluções .

    Não receberá quaisquer erros.
Nota Se usar esta solução alternativa, o controlo de utilizador de ActiveX modificado é adicionado ao formulário como AxTestControl2 e o formulário ainda tem algum código relacionado com AxTestControl1 . Por exemplo, a seguinte instrução é ainda estiver presente, apesar de AxTestControl1 já não estar no formulário:

código de exemplo do Visual Basic .NET
Friend WithEvents AxTestControl1 As AxProject1.AxTestControl
o Visual C# .NET códigos de exemplo
private AxProject1.AxTestControl axTestControl1;
Se utilizou o AxTestControl1 noutro local no código e explicitamente não tiver criado uma instância de um objecto AxProject1.AxTestControl , poderá receber uma
'NullReferenceException'
erro.

Além disso, se tiver vários formulários com uma instância do controlo ActiveX utilizador, terá de repetir os passos anteriores para cada formulário.

Método 2

  1. No Solution Explorer, referências , clique com o botão direito do rato AxProject1 e, em seguida, clique em Remover .
  2. Em referências , clique com o botão direito do rato Projeto1 e, em seguida, clique em Remover .
  3. Abra a linha de comandos do Visual Studio .NET ou Visual Studio 2005 e, em seguida, mude o caminho do directório para o directório bin de UserControlDemo .
  4. Escreva o seguinte comando e, em seguida, prima a tecla ENTER para executar aximp.exe explicitamente gerar um proxy de runtime do idioma comum e um proxy de Windows Forms:

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

    AxInterop.Project1.dll e Project1.dll são geradas no directório bin.

    Nota Substitua o caminho do directório que contém Project1.ocx FilePath.
  5. Mude para o Visual Studio .NET ou Visual Studio 2005. No menu projecto , clique em Add Reference .
  6. Na caixa de diálogo Adicionar referência do que aparece, clique em Procurar .
  7. Localize AxInterop.Project1.dll e Project1.dll e, em seguida, seleccione-os.
  8. Clique em Abrir e, em seguida, clique em OK para adicionar estas referências ao projecto.
  9. Feche e reabra o criador de formulários Windows.

    Repare o controlo de utilizador ActiveX modificado no formulário do Windows Designer.

    Nota Ao contrário na solução alternativa anterior, o controlo de utilizador de ActiveX modificado ainda se chama AxTestControl1 . Por conseguinte, existe um código desnecessário.
  10. No menu criar , clique em criar soluções .

    Não receberá quaisquer erros.
Nota Estes passos baseiam-se o exemplo a partir de "mais informação" secção. Por este motivo, as entidades mencionadas estas tarefas podem diferir das entidades no projecto, dependendo da implementação.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento

  1. Abra o Visual Basic 6.0 e, em seguida, crie um controlo ActiveX projecto.
  2. Na janela Propriedades, altere o Name para TestControl .
  3. No menu Ver , clique em código e, em seguida, adicione o seguinte código:
    Public Sub Method1()
       MsgBox ("Method 1")
    End Sub
  4. No menu ficheiro , clique em Criar Project1.ocx e, em seguida, clique em OK na caixa de diálogo Criar projecto que aparece.
  5. Abra o Visual Studio .NET ou Visual Studio 2005. Crie uma aplicação do Windows com o nome UserControlDemo utilizando o Visual Basic. NET, Visual Basic 2005 e Visual C#. NET.
  6. No Visual Studio .NET 2003, clique em Adicionar/remover itens de caixa de ferramentas dos controlos no menu Ferramentas .

    No Visual Studio .NET 2002, clique em Personalizar caixa de ferramentas dos controlos no menu Ferramentas .


    No Visual Studio.2005, clique em Escolher itens da caixa de ferramentas dos controlos no menu Ferramentas .
  7. Clique no separador Componentes COM e, em seguida, clique em Procurar .
  8. Localize Project1.ocx (criada no passo 4) e, em seguida, seleccioná-la.
  9. Clique em Abrir e, em seguida, clique em OK para adicionar Project1.TestControl à caixa de ferramentas.
  10. Na caixa de ferramentas, faça duplo clique Project1.TestControl para adicionar AxTestControl1 o formulário.

    As referências ao AxProject1 e Projeto1 aparecem automaticamente em referências para UserControlDemo .
  11. No menu criar , clique em criar soluções .
  12. Guardar o projecto e saia do Visual Studio .NET ou Visual Studio 2005.
  13. Mude para o Visual Basic 6.0 e, em seguida, adicionar um evento público, método ou propriedade TestControl . Por exemplo, acrescentar o código seguinte TestControl :
    Public Sub Method2()
       MsgBox ("Method 2")
    End Sub
  14. No menu projecto , clique em Propriedades do projeto1 .
  15. Em Projeto1 - propriedades do projecto caixa de diálogo que aparece, clique para seleccionar componentes .
  16. Em Versão de compatibilidade , clique para seleccionar Compatibilidade binária e, em seguida, clique em OK .

    Nota Passos 14 a 16 descrevem como seleccionar a opção de Compatibilidade binário antes de recompilar o controlo ActiveX de utilizador.
  17. No menu ficheiro , clique em criar Project1.ocx .
  18. Clique em Sim quando lhe for pedido para substituir o ficheiro existente.
  19. Abra o Visual Studio .NET ou Visual Studio 2005 e UserControlDemo .

    Repare que TestControl1 não é visível no Criador de formulários do Windows.
  20. No menu criar , clique em criar soluções .

    Receber erros mencionados na "Sintomas" secção deste artigo.

Referências

Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
316171  (http://support.microsoft.com/kb/316171/EN-US/ )
Para mais informações, visite os seguintes Web Sites da MSDN:
Descrição geral de controlos ActiveX da Microsoft
http://msdn2.microsoft.com/en-us/library/ms968501.aspx (http://msdn2.microsoft.com/en-us/library/ms968501.aspx)
Windows Importador do controlo ActiveX do Forms (aximp.exe)
http://msdn2.microsoft.com/en-us/library/8ccdh774(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/8ccdh774(vs.71).aspx)
Runtime Callable Wrapper
http://msdn2.microsoft.com/en-us/library/8bwh56xe(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/8bwh56xe(vs.71).aspx)
Binário Alterações de compatibilidade no Visual Basic
http://msdn2.microsoft.com/en-us/library/a6xdzb3y(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/a6xdzb3y(vs.71).aspx)


A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbmt kbvs2005swept kbvs2005applies kbideproject kbide kbcomctrls kbctrlcreate kbctrl kbcontrol kbcominterop kbprb KB818220 KbMtpt
Tradução automáticaTradução automática
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 818220  (http://support.microsoft.com/kb/818220/en-us/ )