Переменная 'variable_name' либо необъявлена, либо никогда не назначалась - PullRequest
33 голосов
/ 15 декабря 2011

У меня есть вопрос, связанный с ошибкой в ​​названии.Я работаю с c # и Visual Studio 2010.

У меня есть форма, объявленная как "открытый класс FormularioGeneral: Form", которая является основой для остальных форм в моем приложении.Когда я пытаюсь получить доступ к представлению Designer, я получаю эту ошибку несколько раз, как вы можете видеть на изображении:

Sample of errors Все ошибки ссылаются на строки внутри метода InitializeComponent, где значение присваивается свойствукак этот:

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

Но все переменные объявлены в том же классе, что и свойства только для чтения, и все они назначены внутри метода, который вызывается в конструкторе.

Объявление свойств:

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

Код конструктора:

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

Метод 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)));
        [...]
}

Итак, насколько я знаю, все переменные, которые являютсячто ошибки правильно объявлены и имеют значение, назначенное до вызова функции InitilizeComponent.

Я застрял в этой точке и не знаю, что делать, чтобы решить проблему.Надеюсь, что некоторые из вас могут помочь мне с этим вопросом.

Ответы [ 14 ]

33 голосов
/ 03 июля 2013

Итак, у меня была такая же проблема в прошлом, для исправления я сделал следующее:

  • Решение → Чистое решение;
  • Построение → Перестроить решение;
  • Закрыть Visual Studio, открыть заново.

Большое спасибо Маршаллу Белью!

10 голосов
/ 06 июля 2016

Я столкнулся с этой ошибкой, потому что мой проект только x64. Очевидно, что Visual Studio, будучи 32-битным приложением, не может загружать какие-либо формы или элементы управления, скомпилированные в 64-битную версию в конструкторе. Это имеет смысл, но ошибка не дает никаких указаний на то, в чем проблема.

См. ответ на Visual Studio Designer в x64 не работает .

Обходной путь - изменить проект на Любой ЦП при проектировании, а затем вернуться при сборке.

8 голосов
/ 15 декабря 2011

Возможно, ошибка возникает из-за вашего кода конструктора. Поместите InitializeComponent(); в начало конструктора следующим образом:

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

Пояснение:

Переменные инициализируются в этом методе.

6 голосов
/ 16 июля 2018

В моем случае у меня был более старый проект Windows Forms, где InitializeComponents() начинался так:

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

Это приводило к сообщению об ошибке позже при доступе к componentResourceManager внутри InitializeComponent():

Переменная componentResourceManager либо необъявлена, либо никогда не назначалась.

При сравнении с вновь созданной формой я обнаружил, что она похожа на мою нерабочую форму, за исключением одного:

Переменная не была названа componentResourceManager, нопросто resources.

Решение

После переименования моей переменной также с именем resources все работает успешно.

Конструктор Windows Forms в Visual Studio 2017 правильно открыл форму.

3 голосов
/ 04 марта 2015

У меня была такая же проблема, и очистка и восстановление не работали для меня.

В моем случае проблема была вызвана тем, что дизайнер Visual Studio загружал ссылочные библиотеки DLL из GAC вместо загрузки их из каталога , указанного в файле .csproj.Библиотеки DLL в GAC не имели той же версии, что и локально хранимые библиотеки DLL.

Когда я обновил библиотеки DLL в GAC, чтобы иметь ту же версию, все снова заработало нормально.

2 голосов
/ 01 ноября 2018

Пользовательские элементы управления были вызваны проблемой и после попытки всех предложений ( Фокус решения, затем Alt + Enter ) изменили решение Платформа Цель с x64 на Любой процессор решил проблему.

2 голосов
/ 27 апреля 2017

У меня была эта проблема, когда мой пользовательский элемент управления содержал некоторый код в конструкторе, который был связан с ресурсом времени выполнения.Я добавил нулевую проверку, и она исправлена.

        InitializeComponent();
        if (MyConfig!= null)
        {
            this.label2.Text = MyConfig.text1;
            this.label3.Text = MyConfig.text2;
            this.label1.Text = MyConfig.text3;
        }
1 голос
/ 05 августа 2018

Не помещайте ничего, кроме InitializeComponent(); в конструктор. Вы можете поместить код оттуда в такие события, как Load().

1 голос
/ 15 августа 2017

В моем случае я добавил сторонний элемент управления на панели инструментов (через файл .dll) и нарисовал один из них в своей форме. И по какой-то причине моя Панель инструментов вычистила этот сторонний элемент управления из общей группы (я добавил его в общую группу), поэтому VS не может найти этот элемент управления. Вот что я сделал, чтобы решить эту проблему:

  1. Добавьте этот элемент управления на панель инструментов.
  2. Очистить раствор
  3. Перестройте решение

Перерисовать элемент управления, если необходимо.

1 голос
/ 28 июля 2016

Я работаю с WPF внутри Windows Forms.

Я разместил свой пользовательский элемент управления WPF на хосте элементов Windows Forms. В связи с этим, когда вызывался InitializeComponent (), я выполнял код, прежде чем достигнул InitializeComponent () моего элемента управления WPF. Tricky.

Итак, я переместил его из моего конструктора, Clean Build, Rebuild, Restart VS, и все работает как положено. Наконец-то.

...