0

我在用户控件中编写了事件,并且该用户控件在页面中使用了两次。现在的问题是,我第二次将 Event 设为 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);
}

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

4

1 回答 1

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)
    {
    }
}
于 2014-08-08T14:21:00.233 回答