-2

在此代码中,Form1 假设侦听用户控件中的“添加”按钮并在 Form1 中显示消息。当我在调试模式下运行它时,它在 clicked(this,e) 处返回 NullPointerReference。有人可以帮我弄这个吗?谢谢。

用户控制:

public event EventHandler clicked;

public DataInput()
{
   InitializeComponent();
   Add.Click+= new EventHandler(Add_Click);
}

private void Add_Click(object sender, EventArgs e)
{
   items = textBox1.Text.PadRight(15) + textBox2.Text.PadRight(15) + textBox3.Text.PadRight(15);
   clicked(this, e);
}

形式:

public Form1()
{
   InitializeComponent();
   dataInput.clicked+= new EventHandler(OnChanged);
}

public void OnChanged(Object sender, EventArgs e)
{
   MessageBox.Show("testing");
}
4

2 回答 2

4

因为没有订阅您的clicked事件,所以抛出异常。要么 Form1 尚未创建,也许您正在使用不同的构造函数,或者您稍后取消订阅。无论如何,在调用事件委托之前,您应该始终检查订阅。将您的代码更改Add_Click为:

EventHandler evnt = clicked;
if (evnt != null)
    evnt(this, e);
于 2013-03-05T23:52:40.377 回答
2

不知道为什么“点击”事件处理程序为空。您应该始终确保在使用之前已初始化 EventHandler。IE

if(clicked != null)
{
    clicked(this, e);
}
于 2013-03-05T23:52:26.560 回答