如何为ASP.Net自定义控件提供新的自定义事件

时间:2009-02-24 17:32:28

标签: c# asp.net events

我觉得Google应该能够为我解决这个问题,但我发现很少甚至没有我真正理解的例子。

我有一个名为UserControlTask​​的自定义控件。我希望向它添加一个OnHide事件,顾名思义,我希望在隐藏用户控件时抛出它。

我似乎找到了很多像OnClick这样的重写事件的例子,但是没有添加全新事件的例子。

我真正知道的是我需要声明EventHandler ......

public event EventHandler Hide;

然后我相信将OnHide添加到我的CreateChildControls方法中的属性。我认为无论如何这都是准确的。除此之外我什么都不知道。

4 个答案:

答案 0 :(得分:7)

您的问题不是添加事件(这很容易:

public event EventHandler Hide;

// this is the function that raises the event
private void OnHide() {
    if (Hide != null)
        Hide(this, new EventArgs());
}

您的问题是知道何时调用OnHide()(引发事件) - 因为无法知道用户何时隐藏控件(我假设您正在谈论客户端发生的事情) ,你没有时间提出这个事件。

答案 1 :(得分:0)

您可能会混淆引发事件和事件本身的方法。

Control.OnClick是一种引发Control.Click事件的方法。在重写OnClick(并调用base.OnClick)的子类中,无需通过处理程序即可进行处理。

另一方面,组成的控件必须直接使用事件。

答案 2 :(得分:0)

真的有两个简单的事情。

在自定义控件中要做的第一件事是声明一个事件对象:

public event System.EventHandler EmployeeSelected;

然后从那里开始,在您希望提升事件的代码中,执行以下操作:

protected void btnSelectEmployee_Click(object sender, EventArgs e)
{        
    if (!string.IsNullOrEmpty(txtSearchEmployeeId.Text)) 
    {
       EmployeeSelected(this, new EventArgs());
    }       
}

然后在主调用类中,根据需要使用事件和进程。

如果你想传递事件参数,还可以添加一些东西。

注意:我在自己的应用中添加了一些代码。我认为你可以很容易地推断自己的应用程序。

答案 3 :(得分:0)

这只是解决方案的补充。如何在VB中解决这个问题。 将以下内容添加到控件中;

Delegate Sub OnCompleted()

Public Event Completed As OnCompleted

在需要时提升控件中的事件

RaiseEvent Completed()

然后在父页面中,您可以像这样

来制作该事件
<asp:somecontrol OnCompleted="SomeControl_OnCompleted"...

然后在后面的代码中处理,如此

Protected Sub SomeControl_OnCompleted() Handles SomeControl.Completed

简单的peazy,只需确保您的事件处理程序与您的委托声明相同。