我有一个 UserControl
,需要通知父页面 UserControl
中的按钮已被点击。如何在 UserControl
中引发事件并在主页上捕获它?我尝试使用 static
,但许多人建议我使用事件。
我有一个 UserControl
,需要通知父页面 UserControl
中的按钮已被点击。如何在 UserControl
中引发事件并在主页上捕获它?我尝试使用 static
,但许多人建议我使用事件。
查看事件冒泡--http://msdn.microsoft.com/en-us/library/aa719644%28vs.71%29.aspx
示例:
用户控件
public event EventHandler StatusUpdated;
private void FunctionThatRaisesEvent()
{
//Null check makes sure the main page is attached to the event
if (this.StatusUpdated != null)
this.StatusUpdated(this, new EventArgs());
}
主页/表格
public void MyApp()
{
//USERCONTROL = your control with the StatusUpdated event
this.USERCONTROL.StatusUpdated += new EventHandler(MyEventHandlerFunction_StatusUpdated);
}
public void MyEventHandlerFunction_StatusUpdated(object sender, EventArgs e)
{
//your code here
}
只需在您的控件中添加一个事件:
public event EventHandler SomethingHappened;
当您想通知父组件时,请将其提高:
if(SomethingHappened != null) SomethingHappened(this, new EventArgs);
EventHandler<T>
,其中T
是从EventArgs
派生的类型。
USERCONTROL.StatusUpdated += MyEventHandlerFunction_StatusUpdated
代替this.USERCONTROL.StatusUpdated += new EventHandler(MyEventHandlerFunction_StatusUpdated);
。这样可以省去键入的时间和屏幕空间,特别是当处理泛型事件参数类型时。请注意,翻译保持了原意,但可能不完全符合中文表达习惯。 - ZebiStatusUpdated?.Invoke(new object(), new EventArgs());
注意不要改变原本的意思,并使其更加通俗易懂。 - NickG