2

我正在创建一个自定义控件。假设我正在重新发明轮子并创建一个派生自 UserControl 类的自定义 Button 控件(仅作为示例)

好吧,它当然有一个Click事件处理程序。现在我的问题是,我什么时候调用这个事件处理程序?我知道它发生在页面 OnLoad 和 OnLoadComplete 之间的某个时间,但我不太确定我可以连接到什么事件,以便该Click事件与其他控制事件同时引发。

您打算什么时候调用自定义控件事件?

4

2 回答 2

2

一般来说,一旦您知道潜在事件已经发生,您应该立即提出该事件。

例如,ASP.NET Button 控件如何知道它是被用户点击的?它实现了IPostBackEventHandler和 RaisePostBackEvent() 方法。如果有与控件关联的回发事件数据,则将调用该方法。我相信关联是由它呈现的“名称”属性决定的。然后在 RaisePostBackEvent() 中引发 Click 事件。

您需要回答的问题是:您的控件如何知道它应该引发它的事件?一旦你发现我们剩下的很容易。

如果您的控件与现有的 ASP.NET 控件有相似之处,我建议您逐步浏览 ASP.NET 源代码并了解这些控件是如何工作的。

于 2010-01-22T00:09:31.563 回答
1

如果你实现IPostbackEventHandler,你可以做这样的事情,取自反编译System.Web.Ui.WebControls.Button

protected virtual void RaisePostBackEvent(string eventArgument)
{
    base.ValidateEvent(this.UniqueID, eventArgument);
    if (this.CausesValidation)
    {
        this.Page.Validate(this.ValidationGroup);
    }
    this.OnClick(EventArgs.Empty);
    this.OnCommand(new CommandEventArgs(this.CommandName, this.CommandArgument));
}
于 2010-01-22T00:35:03.143 回答