如何为ASP.Net自定义控件添加新的自定义事件?

4
我觉得这是谷歌应该能够很好地为我解决的问题,但我发现很少有我真正理解的例子。
我有一个名为UserControlTask的自定义控件。我希望添加一个OnHide事件,如其名称所示,当用户控件被隐藏时,我希望它被触发。
我似乎找到了很多覆盖OnClick等事件的例子,但没有一个完全添加新事件的例子。
我唯一确切知道的就是我需要声明EventHandler...
public event EventHandler Hide;

然后我认为在我的CreateChildControls方法中将OnHide添加到属性中。我想这是准确的。除此之外,我一无所知。

4个回答

8
您的问题不在于添加事件(这很容易):
public event EventHandler Hide;

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

你的问题在于不知道何时调用OnHide()方法(它会触发事件),因为没有办法知道用户何时隐藏控件(我猜你说的是客户端上发生的事情),所以也就没有时间去触发这个事件。


好的,那这个怎么办呢?我了解到它继承的控件有一个OnHide事件。如果我像你在这里展示的那样将其添加到控件中,我能否将事件从被继承的控件发送到派生控件中? - Carter
1
在这种情况下,只需重写 OnHide 方法。 - Bryan
如果基类有一个虚拟的OnHide方法,只需重写它,你的方法将被调用(确保在你的实现中调用base.OnHide)。如果该方法不是虚拟的,也许你可以在OnLoad中找出它的内部操作(Reflector可以帮助),并看看你能做些什么。 - configurator

0

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

Delegate Sub OnCompleted()

Public Event Completed As OnCompleted

在需要时在控件中触发事件。
RaiseEvent Completed()

然后在父页面中,您可以像这样捕获该事件

<asp:somecontrol OnCompleted="SomeControl_OnCompleted"...

然后在代码后面进行处理,就像这样

Protected Sub SomeControl_OnCompleted() Handles SomeControl.Completed

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

0

其实只有两件简单的事情。

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

public event System.EventHandler EmployeeSelected;

然后,在你想要触发事件的代码中,你需要执行以下操作:

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

然后在你的主调用类中,你消耗事件并根据需要进行处理。

如果你想传递事件参数,还可以添加一些额外的内容。

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


0

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

Control.OnClick 是一个引发 Control.Click 事件的方法。在子类中重写 OnClick(并调用 base.OnClick)允许处理而无需经过处理程序。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接