"Não foi possível encontrar o tipo de" erro de carregamento de um formulário no Estruturador de Formulários do Windows

StackOverflow https://stackoverflow.com/questions/9314

Pergunta

Eu tenho um .NET 2.0 windows forms aplicativo, que faz uso intenso das ListView o controle.

Eu tenho uma subclasse a ListView classe em um modelo de SortableListView<T> classe, de modo que ele pode ser um pouco mais sobre como ele exibe coisas, de classificação e de si mesmo.

Infelizmente, este parece quebrar o Visual Studio Designer de Formulários, em ambos os VS2005 e 2008.

O programa compila e funciona bem, mas quando eu tento visualizar o proprietário formulário no designer, recebo estes Erros:

  • Não pode encontrar o tipo 'MyApp.Controles.SortableListView'.Por favor, certifique-se de que o assembly que contém esse tipo é referenciado.Se este tipo é uma parte de seu projeto de desenvolvimento, certifique-se de que o projeto foi criado com êxito.

Não há rastreamento de pilha ou de erro de linha de informações disponíveis para este erro

  • A variável 'listViewImages' é ou não declarado ou nunca foi atribuído.

Em MyApp.Principal.Designer.cs Linha:XYZ Coluna:1

Call stack:
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement) 

A linha de código em questão é onde ele realmente é adicionado ao formulário, e é

this.imagesTab.Controls.Add( this.listViewImages );

listViewImages é declarada como

private MyApp.Controls.SortableListView<Image> listViewImages;

e é instanciado no InitializeComponent método da seguinte forma:

this.listViewImages = new MyApp.Controls.SortableListView<Image>();

Como mencionado anteriormente, o programa é compilado e executado perfeitamente, e eu tentei mudar o SortableListView classe para um assembly separado, de modo que ele pode ser compilado separadamente, mas isto não faz nenhuma diferença.

Eu não tenho nenhuma idéia de onde ir a partir daqui.Qualquer ajuda seria apreciada!

Foi útil?

Solução 3

quando você adicionou o listview, você adicioná-lo à caixa de ferramentas e, em seguida, adicioná-lo para o formulário?

Não, eu só editado Main.Designer.cs e mudou a partir de System.Windows.Forms.ListView para MyApp.Controls.SortableListView<Image>

Suspeitando de que pode ter sido devido aos genéricos, me levou para realmente encontrar uma solução.

Para cada classe que eu preciso para fazer um SortableListView, eu definido um "stub da classe' como este

class ImagesListView : SortableListView<Image> { }

Em seguida, fez o Main.Designer.cs arquivo de se referir a essas classes de stub em vez de o SortableListView.

Ele funciona agora, hooray!

Ainda bem que eu sou capaz de fazer isso, porque todos os meus tipos são conhecidos frente, e eu só estou usando o SortableListView como um método de redução de código duplicado.

Outras dicas

Aconteceu-me por causa do x86 / x64 arquitetura.

Desde o Visual Studio (a ferramenta de desenvolvimento em si) não tem nenhuma versão de 64 x, não é possível carregar o controlo de 64 x GUI designer.

A melhor abordagem para esse pode ser ajuste de GUI em x86, e compilá-lo para x64, quando necessário.

Eu tive um problema parecido com este (tho, não é o mesmo) no passado, onde meu controle estava em um espaço de nomes diferente para o meu formulário, mesmo tho que foi no mesmo projeto.Para corrigi-lo eu tive que adicionar um

using My.Other.Namespace;

para o topo da designer gerado código do arquivo.A coisa chata é que foi mantido ficar encantada quando o designer regenerado página.

Eu tive esse problema também, relacionadas com a fusão enorme SVN alterações (conflitos) na *.Designer.cs arquivo.A solução foi só abrir o modo de design gráfico, edição de um controle (mover para a esquerda e para a direita) e salve o projeto.O *.Designer.cs arquivo magicamente mudou, e o aviso foi embora em sua próxima compilação.

Para ser claro, você precisa corrigir todos do código de mesclagem problemas primeiro.Esta é apenas uma maneira de contornar a força VS para recarregá-las.

O assembly que contém MyApp.Controles.SortableListView não está instalado no GAC por acaso é?

quando você adicionou o listview, você adicioná-lo à caixa de ferramentas e, em seguida, adicioná-lo para o formulário?

Talvez você se esqueceu de acrescentar que:

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Release all resources used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be removed otherwise; false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void InitializeComponent()
    {
        // ...
        this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use
        // ...
    }

Eu tinha algo semelhante a um controle de usuário estava se referindo a um remoto serice (o que eu não podia garantia de estar disponível em tempo de design).

Este post no MSDN sugeriu que eu add

if (this.DesignMode) return;

para a função de Carga de controle, ou no meu caso para o ponto antes que o cliente WCF foi inicializado.Que fez o truque.

Então,

private readonly Client _client = new Client();

torna-se

private Client _client;

public new void Load()
{
    if(DesignMode) return;
    _client = new Client();
}

Eu tive o mesmo problema.No meu caso, esse problema foi devido ao recurso de inicialização.Mudei-me o seguinte código a partir de InitializeComponent método construtor(Depois de chamar InitializeComponent).Depois que esse problema foi resolvido:

this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));

Eu tive o mesmo problema.Depois de remover alguns dos meus próprios controles de a *.Designer.cs-Arquivo o problema foi resolvido.Depois de voltar para o código original, o problema foi resolvido.Assim parece ser um problema com o Visual Sudio cache.No momento eu não posso reproduzir este problema.

Se você tiver o problema de tentar emtpy a pasta

C:\Users\YOURNAME\AppData\Local\Microsoft\VisualStudio\VERSION\Designer\ShadowCache

Funcionou?

No meu caso o problema era o nome da pasta do meu projeto!Por que eu acho isso:Eu uso o SVN e o 'tronco\SGIMovel' funciona perfeitamente.Mas em um ramo pasta nomeada como "OS#125\SGIMovel' eu não posso abrir o designer para um formulário que usa um controle personalizado e funciona na pasta trunk.

Acabou de sair o # e funciona legal.

Obrigado por nada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top