这里有类似的问题,但没有一个适合我的特定情况.
我有一个带有按钮的Windows窗体.该按钮附加到事件处理程序,如下所示:
private void mybutton_Click(object sender, EventArgs e)
{
// do some processing here
}
Run Code Online (Sandbox Code Playgroud)
此外,还有一个组合框,其中选择的变化应该触发如上定义的按钮事件处理程序.
private void mycombobox_SelectedIndexChanged(object sender, EventArgs e)
{
mybutton_Click(sender, e); // this is the line which pops up the dialog
}
Run Code Online (Sandbox Code Playgroud)
代码在运行时完全按预期工作,但我在编译时得到一个对话框提示,其中显示:
你调用的对象是空的
没有其他错误或警告.
谷歌搜索告诉我,如果程序试图访问设置为null的引用类型变量的成员,则此消息是错误.
但是,当我在调试模式下运行此代码时,发送方和事件(e)变量都不为空.
那么为什么会弹出这个对话框呢?
如果这是一个错误或警告 - 它应该显示为错误或警告但不会发生这种情况.
这是截图:

编辑:回答评论中提出的问题
您可以在屏幕截图中看到没有错误.
该程序运行良好 - 只需弹出这个
弹出窗口是由line:mybutton_Click(sender, e);在组合框selectedIndexChanged功能中引起的.
在处理过程mybutton_Click(sender, e)中不使用任何发送者或e参数.
我还没有安装任何VS扩展.
小智 2
我认为正在发生的事情是事件在设计模式下触发(我似乎记得在当天使用 WinForms 时发生过几次)。
为了解决这个问题,我所做的就是处理表单加载事件,然后我将一个侦听器附加到 SelectedIndexChanged。然后,在设计模式下,事件不会绑定并且不会触发,但在运行时它会被绑定。
就像是:
public void form_OnLoaded(object sender, EventArgs e)
{
myComboBox.SelectedIndexChanged += mycombobox_SelectedIndexChanged;
}
Run Code Online (Sandbox Code Playgroud)