2015-05-13 55 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'方法执行后消失。