当用户控件's按钮被单击(this,e)时抛出NullPointerException

本文关键字:this NullPointerException 单击 控件 用户 按钮 | 更新日期: 2023-09-27 18:02:20

在这段代码中,Form1假定监听用户控件中的Add按钮,并在Form1中显示消息。当我在调试模式下运行它时,它在点击(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");
}

当用户控件's按钮被单击(this,e)时抛出NullPointerException

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

EventHandler evnt = clicked;
if (evnt != null)
    evnt(this, e);

不确定为什么"clicked" EventHandler为空。您应该确保在使用EventHandler之前已初始化。例如

if(clicked != null)
{
    clicked(this, e);
}