La variable "nom de la variable" n'est pas déclarée ou n'a jamais été assignée

j'ai une question relative à l'erreur sur le titre. Je travaille avec C# et Visual Studio 2010.

j'ai un formulaire déclaré comme" Public class FormularioGeneral : Form", qui est la base pour le reste des formulaires dans ma demande. Lorsque j'essaie d'accéder à la Vue du Concepteur, j'obtiens cette erreur plusieurs fois, comme vous pouvez le voir dans l'image:

Sample of errors Toutes les lignes de référence des erreurs à L'intérieur de la méthode InitializeComponent, lorsque la valeur est affectée à une propriété comme celle-ci:

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

mais toutes les variables sont déclarées dans la même classe que les propriétés en lecture seule et toutes sont affectées à l'intérieur d'une méthode appelée dans le constructeur.

Déclaration des propriétés:

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

Code du constructeur:

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

méthode ConfigurarUI:

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)));
        [...]
}

Donc, autant que je sache, toutes les variables qui donnent les erreurs sont correctement déclarées et ont une valeur assignée avant que la fonction InitilizeComponent soit appelée.

Je suis coincé à ce point et ne sait pas quoi faire pour résoudre le problème. J'espère que certains d'entre vous peut m'aider avec ce problème.

25
demandé sur Uwe Keim 2011-12-15 18:26:24

11 réponses

donc, j'ai eu le même problème dans le passé, car fix j'ai fait ce qui suit:

  • Solution → Solution Propre;
  • Construire → Régénérer La Solution;
  • Fermez Visual Studio, ré-ouvert.

Merci beaucoup à Marshall Belew!

31
répondu Lucas 2018-07-16 08:54:51

peut-être que l'erreur est due à votre code de constructeur. Placez InitializeComponent(); au début du constructeur comme ceci:

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

explication:

les variables sont initialisées dans cette méthode.

8
répondu Fischermaen 2011-12-15 14:29:37

j'ai rencontré cette erreur parce que mon projet est x64 seulement. Apparemment Visual Studio, étant une application de 32 bits, ne peut pas charger des formes ou des contrôles compilés à 64 bits dans le concepteur. C'est tout à fait logique, mais l'erreur ne vous donne aucune indication que c'est le problème.

Voir la réponse à concepteur Visual studio en x64 ne fonctionne pas .

la solution est de changer votre projet à N'importe quel CPU quand je dessine, puis je reviens quand je construis.

6
répondu Swoogan 2017-05-23 12:18:13

j'ai eu le même problème et le nettoyage et la reconstruction ne fonctionnait pas pour moi.

dans mon cas, le problème a été causé par le fait que Visual Studio designer chargeait les DLLs référencés du GAC au lieu de les charger à partir du répertoire spécifié dans le .fichier csproj. Les DLLs du GAC n'avaient pas la même version que les DLLs stockées localement.

quand j'ai mis à jour les DLLs dans le GAC pour avoir la même version tout fonctionnait bien à nouveau.

3
répondu frodesto 2015-03-04 09:18:29

dans mon cas, j'ai eu un vieux projet Windows Forms où InitializeComponents() a commencé comme ceci:

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

il en est résulté un message d'erreur plus tard lors de l'accès au componentResourceManager à l'intérieur de InitializeComponent() :

la variable "componentResourceManager" n'est pas déclarée ou n'a jamais été attribuée.

en comparant avec une forme nouvellement créée, j'ai vu qu'il était similaire à mon non-travail forme, sauf pour une chose:

la variable n'a pas été nommée componentResourceManager mais simplement resources .

Solution

après avoir fait un renommage sur ma variable pour avoir aussi le nom resources , tout fonctionne avec succès.

le concepteur de formulaires Windows dans Visual Studio 2017 a ouvert le formulaire correctement.

2
répondu Uwe Keim 2018-07-16 12:20:59

à propos des variables, pouvez-vous simplement les initialiser dans la déclaration? Je pense que cela suffirait, même si vous changez la valeur plus tard. De ce que je vois, le compilateur est incapable de vérifier si vous les avez initialisés ou non parce qu'il n'est pas directement sur le code du constructeur, il est fait sur une méthode virtuelle qui évaluera seulement à l'exécution.

ainsi, au lieu de:

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

:

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

et un commentaire: vous devez éviter les appels virtuels dans le constructeur, qui peuvent conduire à des erreurs obscures dans votre application. Vérifiez ici .

1
répondu Bruno Brant 2017-05-23 12:26:23

cette erreur se produit pour moi lors de la création d'un contrôle tiers dans InitializeComponent() qui est appelé à partir du constructeur de forme. Quand je l'ai créé après InitializeComponent() il fonctionne très bien pour moi.

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

    //Create/initialize third party control here with new operator    
}
1
répondu Pabitra Dash 2016-02-20 06:10:14

je travaille avec WPF à L'intérieur de Windows Forms.

j'ai hébergé mon contrôle D'utilisateur WPF dans un hôte D'élément Windows Forms. En raison de cela quand InitializeComponent() a été appelé j'ai exécuté le Code avant D'atteindre le InitializeComponent() de mon contrôle WPF. Délicat.

donc je l'ai déplacé hors de mon constructeur, nettoyer la construction, reconstruire, redémarrer VS et tout fonctionne comme prévu. Enfin.

1
répondu Matthis Kohli 2016-07-28 10:42:26

j'ai eu ce problème quand mon contrôle d'utilisateur avait du code dans le constructeur qui était lié à la ressource d'exécution. J'ai ajouté null vérifier et réparer.

        InitializeComponent();
        if (MyConfig!= null)
        {
            this.label2.Text = MyConfig.text1;
            this.label3.Text = MyConfig.text2;
            this.label1.Text = MyConfig.text3;
        }
1
répondu RcMan 2017-04-27 10:35:01

dans mon cas, j'ai ajouté un contrôle tiers dans ma barre d'outils(via a.dll fichier), et de dessiner dans mon formulaire. Et pour une raison quelconque, ma barre d'outils nettoie ce contrôle tiers hors du groupe général (je l'ai ajouté dans le groupe général), donc VS ne peut pas trouver ce contrôle. Voici ce que j'ai fait pour résoudre ce problème:

  1. ajouter cette commande dans la barre d'outils.
  2. nettoyer la solution
  3. reconstruire la solution

modifier la commande si nécessaire.

1
répondu Mathew Li 2017-08-15 16:22:42

ne mettez rien d'autre que InitializeComponent(); dans le constructeur. Vous pouvez mettre le code à partir de là dans des événements comme Load() .

0
répondu user2638817 2018-08-05 01:23:32