我有一个自定义的用户控件,我想做一些相对简单的事情。
每当该用户控件的值上下数字更改时,请使主窗体更新显示窗口。
如果NUD不在用户控件中,那么这不是问题,但是我似乎无法弄清楚如何由主窗体而不是用户控件来处理事件。
您需要为用户控件创建事件处理程序,该事件处理程序在触发用户控件中的事件时引发。这将使您能够在事件链上冒泡,以便可以从表单中处理事件。
当点击Button1UserControl时,我将Button1_Click触发UserControl_ButtonClick在表单上触发的事件:
Button1
Button1_Click
UserControl_ButtonClick
用户控件:
[Browsable(true)] [Category("Action")] [Description("Invoked when user clicks button")] public event EventHandler ButtonClick; protected void Button1_Click(object sender, EventArgs e) { //bubble the event up to the parent if (this.ButtonClick!= null) this.ButtonClick(this, e); }
形成:
UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick); protected void UserControl_ButtonClick(object sender, EventArgs e) { //handle the event }
笔记:
较新的Visual Studio版本建议if (this.ButtonClick!= null) this.ButtonClick(this, e);您代替使用ButtonClick?.Invoke(this, e);,它的作用基本相同,但更短。
if (this.ButtonClick!= null) this.ButtonClick(this, e);
ButtonClick?.Invoke(this, e);
该Browsable属性使事件在Visual Studio的设计器(事件视图)中可见,Category并在“动作”类别中显示该事件,并Description提供对其的描述。您可以完全省略这些属性,但是由于VS可以为您处理,因此使设计者可以轻松使用它们。
Browsable
Category
Description