[英]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.