在此代码中,Form1假设在用户控件中侦听“添加”按钮并在Form1中显示该消息。当我在调试模式下运行它时,它会在单击时返回NullPointerReference(this,e)。有人可以帮我弄这个吗?感谢。
用户控制:
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");
}
答案 0 :(得分:4)
抛出异常,因为您的clicked
事件没有订阅。 Form1尚未创建,也许您正在使用不同的构造函数,或者您以后取消订阅。
无论如何,在调用事件委托之前,您应该始终检查订阅。
将Add_Click
中的代码更改为:
EventHandler evnt = clicked;
if (evnt != null)
evnt(this, e);
答案 1 :(得分:2)
不确定为什么“clicked”EventHandler为null。 在使用之前,您应始终确保已初始化EventHandler。 即。
if(clicked != null)
{
clicked(this, e);
}