it-swarm-pt.tech

A variável 'variable_name' não foi declarada ou nunca foi atribuída

Eu tenho uma pergunta relacionada ao erro no título. Estou trabalhando com c # e Visual Studio 2010.

Eu tenho um formulário declarado como "classe pública FormularioGeneral: Form", que é a base para o restante dos formulários no meu aplicativo. Quando tento acessar a Visualização do designer, recebo esse erro várias vezes, como você pode ver na imagem:

Sample of errors Todos os erros referenciam linhas dentro do método InitializeComponent, em que o valor é atribuído a uma propriedade como esta:

[...]            
this.PanelMargenIzquierdoCapaBase.BackColor = m_ColorCapaBase;
[...]

Mas todas as variáveis ​​são declaradas na mesma classe que as propriedades somente leitura e todas elas são atribuídas dentro de um método chamado no construtor.

Declaração de propriedades:

    protected Color m_VariableName;
    public Color VariableName
    {
        get { return m_VariableName; }
        set { }
    }

Código do construtor:

    public FormularioGeneral()
    {
        ConfigurarUI();
        AccionesConstructor();
        InitializeComponent();
        PostInicializacionComponentes();
        EstablecerIcono();
        InicializarLocalizacionFormulario();
    }

Método ConfigureUI:

public virtual void ConfigurarUI()
{
        [...]

        m_AltoBordeSuperiorCapaBase = 30;
        m_AltoBordeInferiorCapaBase = 7;
        m_AnchoBordesLateralesCapaBase = 7;

        m_ColorCapaBase = Color.FromArgb(50, 100, 150);
        m_ColorTextoCapaBase = Color.White;
        m_ColorTextoBotonAplicacion = Color.Black;

        m_FuenteTextoIzquierdoCapaBase = new System.Drawing.Font("Verdana", 11.0F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        m_FuenteTextoCentroCapaBase = new System.Drawing.Font("Verdana", 14.0F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        [...]
}

Então, tanto quanto eu sei, todas as variáveis ​​que estão dando os erros são declaradas corretamente e têm um valor atribuído antes que a função InitilizeComponent seja chamada.

Estou preso neste momento e não sei o que fazer para resolver o problema. Espero que alguns de vocês possam me ajudar com esse problema.

33
Kitinz

Então, eu tive o mesmo problema no passado, para corrigir, fiz o seguinte:

  • Solução → Solução Limpa;
  • Compilar → Reconstruir Solução;
  • Feche o Visual Studio, abra novamente.

Muito obrigado a Marshall Belew!

36
Lucas

Eu encontrei esse erro porque meu projeto é apenas x64. Aparentemente, o Visual Studio, sendo um aplicativo de 32 bits, não pode carregar nenhum formulário ou controle compilado para 64 bits no designer. Faz total sentido, mas o erro não fornece nenhuma indicação de que é o problema.

Consulte a resposta a O designer do Visual Studio em x64 não funciona .

A solução alternativa é alterar seu projeto para Qualquer CPU ao projetar e depois ao construir.

10
Swoogan

Talvez o erro ocorra devido ao seu código de construtor. Coloque InitializeComponent(); no início do construtor assim:

public FormularioGeneral()     
{         
    InitializeComponent();
    ConfigurarUI();         
    AccionesConstructor();
    PostInicializacionComponentes();         
    EstablecerIcono();         
    InicializarLocalizacionFormulario();     
} 

Explicação:

As variáveis ​​são inicializadas nesse método.

8
Fischermaen

No meu caso, eu tinha um projeto Windows Forms mais antigo, onde InitializeComponents() começou assim:

private void InitializeComponent()
{
    var componentResourceManager = new ComponentResourceManager(typeof(MyForm));
    ...

Isso resultou em uma mensagem de erro mais tarde ao acessar o componentResourceManager dentro de InitializeComponent():

A variável 'componentResourceManager' não é declarada ou nunca foi atribuída.

Ao comparar com um formulário recém-criado, vi que era semelhante ao meu formulário não útil, exceto por uma coisa:

A variável não foi nomeada componentResourceManager, mas simplesmente resources.

Solução

Depois de renomear minha variável para também ter o nome resources, tudo funciona com êxito.

O Windows Forms Designer no Visual Studio 2017 abriu o formulário corretamente.

6
Uwe Keim

Eu tive o mesmo problema e a limpeza e a reconstrução não funcionaram para mim.

No meu caso, o problema foi causado pelo designer do Visual Studio carregando DLLs referenciadas do GAC em vez de carregá-las no diretório <HintPath> especificado no arquivo .csproj. As DLLs no GAC não tinham a mesma versão que as DLLs armazenadas localmente.

Quando atualizei as DLLs no GAC para ter a mesma versão, tudo funcionou bem novamente.

3
frodesto

Eu tive esse problema quando meu controle de usuário tinha algum código no construtor relacionado ao recurso de tempo de execução. Adicionei verificação nula e foi corrigida.

        InitializeComponent();
        if (MyConfig!= null)
        {
            this.label2.Text = MyConfig.text1;
            this.label3.Text = MyConfig.text2;
            this.label1.Text = MyConfig.text3;
        }
2
RcMan

Os controles do usuário foram causados ​​por um problema e, depois de tentar todas as sugestões, ( Concentre a solução e, em seguida, Alt + Enter ) alterando a solução destino da plataforma de - x64 a Qualquer CP resolveu o problema.

2
Furkan Ekinci

Estou trabalhando com o WPF dentro do Windows Forms.

Hospedei meu controle de usuário WPF em um host de elemento de formulários do Windows. Devido a isso, quando InitializeComponent () foi chamado, executei o Código antes de alcançar o InitializeComponent () do meu controle WPF. Complicado.

Então, eu o mudei para fora do meu construtor, Compilar Limpo, Reconstruir, Reiniciar o VS e tudo funciona conforme o esperado. Finalmente.

1
Matthis Kohli

No meu caso, adicionei um controle de terceiros na minha barra de ferramentas (por meio de um arquivo .dll) e desenhei um deles no meu formulário. E, por alguma razão, minha Barra de Ferramentas limpa esse controle de terceiros do grupo geral (eu o adicionei no grupo geral), para que o VS não consiga encontrar esse controle. Aqui está o que eu fiz para resolver este problema:

  1. Adicione este controle na barra de ferramentas.
  2. Limpe a solução
  3. Reconstrua a solução

Redesenhe o controle, se necessário.

1
Mathew Li

Este erro ocorre durante a criação de um controle de terceiros em InitializeComponent (), chamado do construtor de formulários. Quando eu o criei após InitializeComponent (), ele funciona bem para mim.

public MyForm() //Form constructor
{         
    InitializeComponent();

    //Create/initialize third party control here with new operator    
}
1
Pabitra Dash

Não coloque nada além de InitializeComponent(); no construtor. Você pode colocar o código a partir daí em eventos como Load().

1
user2638817

Sobre as variáveis, você pode simplesmente inicializá-las na declaração? Eu acho que seria suficiente, mesmo se você alterar o valor mais tarde. Pelo que estou vendo, o compilador não consegue verificar se você os inicializou ou não, porque não está diretamente no código do construtor, está sendo feito em um método virtual que avaliará apenas em tempo de execução.

Então, em vez de:

protected Color m_VariableName;
public Color VariableName
{
    get { return m_VariableName; }
    set { }
}

Faz:

protected Color m_VariableName = Color.White; // Or null
public Color VariableName
{
    get { return m_VariableName; }
    set { }
}

E um comentário: você deve evitar chamadas virtuais no construtor, o que pode levar a erros obscuros no seu aplicativo. Verifique aqui .

1
Bruno Brant

Renomear a variável componentResourceManager para erro de recursos resolvidos.

Infelizmente, tive que alterar vários outros itens para que o designer trabalhasse no Telerik reports designer

0
user2956084

Na minha solução, eu tinha caminhos de referência incorretos que eu consertei nos arquivos .csproj. Depois de corrigir isso, eu finalmente poderia carregar o formulário novamente.

0
drecunion

Primeiro, tive um código que referenciava algo de um tipo que o designer não podia carregar (por qualquer motivo). Então eu tinha um código no construtor que não podia ser executado no meu laptop local. Decidi que a melhor opção era mover a lógica para o evento Load e verificar se o componente estava no DesignMode e sair se estivesse.

Mesmo isso não foi suficiente para mim, já que o designer ainda tentou JIT do tipo que foi posteriormente descrito no método, então tive que mudar para um método separado para impedir que isso acontecesse. Aqui está basicamente o que eu acabei com:

    private void userControl_Load(object sender, EventArgs e)
    {
        if (DesignMode) return;

        Initialize();
    }

    private void Initialize()
    {
        // do your work
    }

Agradecimentos especiais a esta SO resposta , que me indicou um comentário em uma postagem no blog sobre não acessar a propriedade DesignMode até que você esteja no evento Load ...

0
csrowell