未设置对象引用

时间:2013-11-08 08:34:16

标签: c# .net

这里有类似的问题,但没有一个适合我的特定情况。

我有一个带有按钮的Windows窗体。该按钮附加到事件处理程序,如下所示:

private void mybutton_Click(object sender, EventArgs e)
{
    // do some processing here
}

此外还有一个组合框,其中选择的变化应该触发上面定义的按钮事件处理程序。

private void mycombobox_SelectedIndexChanged(object sender, EventArgs e)
{
    mybutton_Click(sender, e); // this is the line which pops up the dialog
}

代码在运行时完全按预期工作,但我在编译时得到一个对话框提示符,其中显示:

  

对象引用未设置为对象的实例

没有其他错误或警告。

谷歌搜索告诉我,如果程序试图访问设置为null的引用类型变量的成员,则此消息是错误。

但是,当我在调试模式下运行此代码时,发送方和事件(e)变量都不为空。

那么为什么会出现这个对话框?

如果这是一个错误或警告 - 它应该显示为错误或警告但不会发生这种情况。

这是截图: enter image description here

编辑:回答评论中提出的问题

屏幕截图中没有错误。

该程序运行良好 - 只需弹出

弹出窗口是由组合框mybutton_Click(sender, e);函数中的行selectedIndexChanged引起的。

mybutton_Click(sender, e)在处理过程中不使用任何发送者或e参数。

我还没有安装任何VS扩展。

2 个答案:

答案 0 :(得分:4)

在ComboBox的Click-event中调用按钮的SelectedIndexChanged-event并不是一个好的设计,这也可能是错误的原因。

最好把你的逻辑放在一个单独的方法中,并在Click-和SelectedIndexChanged事件中调用它,如下所示:

private void UpdateSomething()
{
    // Do whatever you want
}

private void mybutton_Click(object sender, EventArgs e)
{
    UpdateSomething();
}

private void mycombobox_SelectedIndexChanged(object sender, EventArgs e)
{
    UpdateSomething();
}

答案 1 :(得分:2)

认为正在发生的事情是事件在设计模式下启动(我似乎记得在当天使用WinForms时我发生过几次)。

为了解决它,我所做的是处理表单加载事件,然后我将一个监听器附加到SelectedIndexChanged。然后在设计模式下,事件没有绑定并且不会触发,但在运行时它被绑定。

类似的东西:

public void form_OnLoaded(object sender, EventArgs e)
{
     myComboBox.SelectedIndexChanged += mycombobox_SelectedIndexChanged;
}