未设置对象引用

bha*_*arc 5 .net c#

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

我有一个带有按钮的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)