2015-05-13 54 views
2

我知道現在有一些關於stackOverFlow上這個問題的問題,但是他們都沒有解決我的問題。C#自定義事件始終爲空

我使用「asp.net webform」和我的UserControl我想要當我點擊Button,在使用此UserControl的頁面中觸發事件。所以這是我的代碼。

// in user control 
public delegate void OnConversationSubmitDelegate(object sender, EventArgs e); 
public event OnConversationSubmitDelegate OnConversationSubmitEvenet; 

protected void btnUserSubmit_Click(object sender, EventArgs e) 
{ 
    if (OnConversationSubmitEvenet != null) //This is always null 
    { 
     OnConversationSubmitEvenet(this, new EventArgs()); 
    } 
} 

// in main page 
protected void Page_Load(object sender, EventArgs e) 
{ 
    UserControls.ConversationBox m = new UserControls.ConversationBox(); 
    m.OnConversationSubmitEvenet += new UserControls.ConversationBox.OnConversationSubmitDelegate(Test_Event); 
} 

public static void Test_Event(object sender, EventArgs e) 
{ 
    string g = "sdfsd"; 
} 

問題是OnConversationSubmitEvenet總是空的Test_Event方法永遠不會運行。

回答

1

它似乎是你在Page_Load中創建一個新的ConversationBox,但我懷疑由於你沒有將它添加到頁面控件中,你還在aspx中添加了一個ConversationBox?

如果你沒有添加ConversationBox在ASPX,然後取而代之的是:

UserControls.ConversationBox m = new UserControls.ConversationBox(); 
m.OnConversationSubmitEvenet += new UserControls.ConversationBox.OnConversationSubmitDelegate(Test_Event); 

你應該用你的ASPX加入ConversationBox:

myConversationBox.OnConversationSubmitEvenet += new UserControls.ConversationBox.OnConversationSubmitDelegate(Test_Event); 

或者你也可以刪除在aspx中添加一個,並在頁面控件中添加m

UserControls.ConversationBox m = new UserControls.ConversationBox(); 
m.OnConversationSubmitEvenet += new UserControls.ConversationBox.OnConversationSubmitDelegate(Test_Event); 
Page.Controls.Add(m); // This line adds the control to the page 
+0

是的,絕對的問題是,它不是你點擊你的表單的同一個實例。 – MistyK

+0

非常感謝,是的,這是我的問題,現在它的工作如我所料。 –

-1

你應該在表單中聲明'm'作爲字段,因爲現在'm'是局部變量,在'Load'方法執行後消失。