在c#中的类构造函数之前调用SelectedIndexChanged

时间:2014-03-10 15:22:36

标签: c# winforms selectedvalue selectedindexchanged

我在我的c#应用程序中创建了一个名为Acquisti的类。 然后我在表单构造函数中初始化它,然后在combobox SelectedIndexChanged事件中调用此类的方法。 问题是,当我运行程序时,我收到一个错误,指出我创建的Acquisti类的对象为null。这意味着SelectedIndexChanged事件比表单构造函数之前调用,不是吗?我也尝试过SelectedValueChanged事件,但我遇到了同样的问题。这是简单的代码:

Acquisti _acquisti;

    public Form1()
    {
        InitializeComponent();
        WindowState = FormWindowState.Maximized;

        for (int i = DateTime.Now.Year; i >= 2000; i--)
            annoAcquisti.Items.Add(i);

        annoAcquisti.SelectedIndex = 0;

        _acquisti = new Acquisti();
    }



    private void annoAcquisti_SelectedIndexChanged(object sender, EventArgs e)
    {
        _acquisti.load(ref acquistiDGV, annoAcquisti.SelectedItem.ToString());
    }

2 个答案:

答案 0 :(得分:4)

SelecteIndexChanged由于行而被调用:

annoAcquisti.SelectedIndex = 0;

之后你正在初始化_acquisti。您可以在之前移动该行:

public Form1()
{
    InitializeComponent();
    _acquisti = new Acquisti(); //move it here
    WindowState = FormWindowState.Maximized;

    for (int i = DateTime.Now.Year; i >= 2000; i--)
        annoAcquisti.Items.Add(i);

    annoAcquisti.SelectedIndex = 0;

}

由于控件移动到SelectedIndexChanged事件,并且此时_acquisti仍为空,这就是您获得异常的原因。

答案 1 :(得分:2)

  

这意味着之前调用SelectedIndexChanged事件而不是表单构造函数,不是吗?

没有。它在表单构造函数完成之前调用 - 作为构造函数中的actins的结果。

这很容易修复 - 而不是使用控件来首先初始化它们然后再玩。

在循环之前移动_Ackquisti = new ....行。 Finishied。

事实上,初始化应该首先发生 - 在进一步操作之前。 InitializeCOmponent(),然后是其他初始化,然后是更复杂的东西。