我觉得Google应该能够为我解决这个问题,但我发现很少甚至没有我真正理解的例子。
我有一个名为UserControlTask的自定义控件。我希望向它添加一个OnHide事件,顾名思义,我希望在隐藏用户控件时抛出它。
我似乎找到了很多像OnClick这样的重写事件的例子,但是没有添加全新事件的例子。
我真正知道的是我需要声明EventHandler ......
public event EventHandler Hide;
然后我相信将OnHide添加到我的CreateChildControls方法中的属性。我认为无论如何这都是准确的。除此之外我什么都不知道。
答案 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,只需确保您的事件处理程序与您的委托声明相同。