我在我的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());
}
答案 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(),然后是其他初始化,然后是更复杂的东西。