5

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

我有一个带有按钮的 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 的引用类型变量的成员,则会导致此消息错误。

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

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

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

这是屏幕截图: 在此处输入图像描述

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

正如您在屏幕截图中看到的那样,没有错误。

该程序运行良好 - 只是这个弹出

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

mybutton_Click(sender, e)处理中不使用任何参数 sender 或 e。

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

4

2 回答 2

4

Click-event调用 ComboBox中的按钮的不是一个好的设计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();
}
于 2013-11-08T09:47:26.683 回答
2

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

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

就像是:

public void form_OnLoaded(object sender, EventArgs e)
{
     myComboBox.SelectedIndexChanged += mycombobox_SelectedIndexChanged;
}
于 2013-11-08T09:37:22.897 回答