自定义事件在第二次调用时变为空

时间:2014-08-08 14:09:19

标签: c# asp.net .net event-handling custom-events

我在用户控件中编写了事件,并且该用户控件在页面中使用了两次。现在的问题是,我第二次将事件视为null。为什么?如何解决这个问题?请帮忙。

我的代码如下:

在ascx中:

public delegate void OnGoButtonClick();
public event OnGoButtonClick btnGoClickHandler;
protected void btnGo_Click(object sender, EventArgs e)
{
   if (btnGoClickHandler != null)
                btnGoClickHandler();
}

在aspx中:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    MyUserControl.btnGoClickHandler += new UserControls.LoanPicker.OnGoButtonClick(PopulateDataOnGo);
}

但对于第二个用户控件,它始终为空。

1 个答案:

答案 0 :(得分:0)

确保从两个控件订阅该事件。

关于你的评论:

  

如何检测被触发的用户控件

您需要将引发事件的对象提供给事件处理程序。首先将代理签名更改为:

public delegate void OnGoButtonClick(object sender);
public event OnGoButtonClick btnGoClickHandler;
protected void btnGo_Click(object sender, EventArgs e)
{
   if (btnGoClickHandler != null) 
       btnGoClickHandler(this);
}

现在更改事件处理程序,在这种情况下似乎PopulateDataOnGo接受sender并检查是谁从那里引发了事件:

public void PopulateDataOnGo(object sender)
{
    if (sender is ControlType1)
    {
    } 
    else if (sender is ControlType2)
    {
    }
}