我知道现在有一些关于stackOverFlow这个问题的问题,但是没有一个能解决我的问题。
我使用" 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
方法永远不会运行。
答案 0 :(得分:1)
似乎是你在Page_Load中创建了一个新的ConversationBox
,但我怀疑你没有将它添加到页面控件中,你还在aspx中添加了一个ConversationBox?
如果您确实在aspx中添加了ConversationBox,那么请改为:
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
答案 1 :(得分:-1)
你应该在表单中声明'm'作为字段,因为现在'm'是在'Load'方法执行后消失的局部变量。