[英]C# Custom Event Handler
我是一个学习c#的人,并且我有一个包含“父母”形式和“孩子”形式的程序。 我希望子窗体引发一个事件,以便父窗体可以执行某些操作。 我复制了一些代码,但是我不够聪明,看不出什么毛病。 我不知道如何在子表单中正确编码该事件。 错误是未定义DatasourceUpdated。 谁能帮我解决建议的问题?
在儿童形式中,我有
public partial class Form2 : Form
{
public EventHandler DataSourceUpdated;
...
private void button2_Click(object sender, EventArgs e) //Done button
{
if (this.DataSourceUpdated != null) //raise the event
{
this.DatasourceUpdated();
}
this.Close();
}
在父表格中,我有这个:
private void myAddRecord()
{
string myID = string.Empty;
string myMessage = "Insert";
Form2 myForm = new Form2(myID, myMessage);
Form2.DatasourceUpdated += ChildUpdated;
myForm.Show();
现在,您声明的是EventHandler,而不是事件。 将其更改为:
public partial class Form2 : Form
{
public event EventHandler DataSourceUpdated;
...
private void button2_Click(object sender, EventArgs e) //Done button
{
if (this.DataSourceUpdated != null) //raise the event
{
this.DataSourceUpdated(this, EventArgs.Empty);
}
this.Close();
}
另外,当您订阅事件时,需要在实例上而不是在类上订阅事件:
Form2 myForm = new Form2(myID, myMessage);
myForm.DataSourceUpdated+= ChildUpdated;
myForm.Show();
这是因为该事件是在实例级别而非静态声明的。
Form2.DatasourceUpdated += ...
您正在尝试将您的处理程序附加到该类上,请改用
myForm.DatasourceUpdated += ...
据我所知,只要您有实际的处理程序,您的代码就看起来正确。 您尚未将其包含在您的代码中。 ChildUpdated
必须是一个带有签名标记void (object sender, EventArgs e)
,并且还应该引发类似this.DataSourceUpdated(this, null);
的事件this.DataSourceUpdated(this, null);
通过将事件声明为由具有该签名的System.EventHandler
处理的事实来指定签名。 如果希望它接收某些特殊参数或根本不接收任何参数,则也可以创建自己的委托。
另外,您的示例中有一个不正确的大小写, this.DatasourceUpdated
> this.DataSourceUpdated
,但是我假设这只是您的示例...?
.NET事件同时具有“发送者”对象和“ EventArgs”对象。 当您的事件被调用时,这些必须包括在内。
例如:
private void button2_Click(object sender, EventArgs e) //Done button
{
if (this.DataSourceUpdated != null) //raise the event
{
this.DatasourceUpdated(this, EventArgs.Empty);
}
this.Close();
}
首先有一个小错字: DatasourceUpdated
vs DataSourceUpdated
。 看到大写字母S吗? 另外,不要忘记args并将DataSourceUpdated
声明为event
:
public event EventHandler DataSourceUpdated;
...
this.DataSourceUpdated(this, EventArgs.Empty);
我注意到的另一个问题是,您应该在调用实例成员时调用静态成员:
Form2.DatasourceUpdated += ChildUpdated;
至
myForm.DatasourceUpdated += ChildUpdated;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.