Переменная '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 ]

1 голос
/ 20 февраля 2016

Эта ошибка возникает для меня при создании стороннего элемента управления в InitializeComponent (), который вызывается из конструктора форм.Когда я создал его после InitializeComponent (), он отлично работает для меня.

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

    //Create/initialize third party control here with new operator    
}
1 голос
/ 15 декабря 2011

О переменных, вы можете просто инициализировать их в объявлении? Я думаю, что этого будет достаточно, даже если вы измените значение позже. Из того, что я вижу, компилятор не может проверить, инициализировали ли вы их или нет, потому что он не находится непосредственно в коде конструктора, это делается на виртуальном методе, который оценивает только во время выполнения. 1003 * Итак, вместо:

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

Do:

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

И комментарий: вам следует избегать виртуальных вызовов в конструкторе, которые могут привести к неясным ошибкам в вашем приложении. Проверьте это здесь .

0 голосов
/ 27 июня 2019

Переименование переменной componentResourceManager для ресурсов решило ошибку.

К сожалению, мне пришлось изменить кучу других элементов, чтобы дизайнер работал на дизайнера отчетов Telerik

0 голосов
/ 01 марта 2019

Сначала у меня был код, который ссылался на что-то типа, который дизайнер не мог загрузить (по какой-либо причине).Тогда у меня был код в конструкторе, который не мог быть выполнен с моего локального ноутбука.Я решил, что лучшим вариантом было бы переместить логику в событие Load и проверить, был ли компонент в DesignMode, и выйти, если он был.

Даже этого было недостаточно для меня, так как дизайнер все еще пытался JIT-тип, который был позже в методе, поэтому мне пришлось перенести его в отдельный метод, чтобы не допустить этого.Вот в основном то, чем я закончил:

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

        Initialize();
    }

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

Особая благодарность этому SO-ответу , который указал мне на комментарий в посте блога о том, что я не обращаюсь к свойству DesignMode, пока вы не вЗагрузка события ...

...