C#自定义事件处理程序
我是一个学习c#的人,我有一个带有父窗体和子窗体的程序。我希望子表单能够引发事件,以便父表单可以执行某些操作。我复制了一些代码,但我不够聪明,看不到有什么问题。我不知道如何在子窗体中正确编写事件。该错误是DatasourceUpdated未定义。任何人都可以帮我解决一个建议的问题吗?C#自定义事件处理程序
子窗体我有
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();
只要你有一个实际的处理程序,你的代码看起来是正确的,据我所知,你没有将它包含在你的代码中。 ChildUpdated
需要是与签名void (object sender, EventArgs e)
,你应该也提出这样的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();
}
他也被宣布为代表,而不是事件。 – 2009-11-19 17:52:04
Form2.DatasourceUpdated += ...
你试图附加处理程序的类试试这个,而不是
myForm.DatasourceUpdated += ...
Form2类也存在问题,该事件如何声明和引发。 – 2009-11-19 17:54:13
首先,有一个小错字:DatasourceUpdated
VS DataSourceUpdated
。看大写字母S?另外,不要忘了指定参数和申报DataSourceUpdated
为event
:
public event EventHandler DataSourceUpdated;
...
this.DataSourceUpdated(this, EventArgs.Empty);
还有一个问题,我注意到的是,你打电话时,你应该调用一个实例成员静态成员:
Form2.DatasourceUpdated += ChildUpdated;
到
myForm.DatasourceUpdated += ChildUpdated;
现在,你声明一个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();
这是因为该事件是在实例级声明的,而不是静态的。
ChildUpdated定义在哪里?你能告诉我们代码吗? – 2009-11-19 17:49:36
我有一个名为InsertRecord的方法来处理子窗体上的SQL更新。我是否需要从InsertRecord的结果中设置DataSourceUpdated,还是只需要事件处理程序引用InsertRecord? – 2009-11-19 18:16:54
@Mark W,你不应该编辑你的问题的错误。现在,如果有人读你的问题,他们不会看到你的实际问题,并可能没有意识到你用“固定”代码更新了你的问题,使他们也许认为你发布的内容实际上是不正确的。 – 2009-11-19 18:51:44