如何在用户控件中创build一个事件,并在主窗体中添加它?

我有一个自定义的用户控件,我想做一些相对简单的事情。

当那个usercontrol的值发生变化时,主窗体会更新一个显示窗口。

这不是一个问题,如果NUD不是在一个用户控件,但我似乎无法弄清楚如何让事件处理由mainform而不是usercontrol。

您需要为用户控件创build一个事件处理程序,当用户控件中的事件触发时引发该用户控件。 这将允许您将事件向上冒泡,以便您可以从表单处理事件。

当单击UserControl上的Button1时,我将触发Button1_Click ,触发表单上的UserControl_ButtonClick

用户控制:

 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 } 

尝试映射它。 尝试把这个代码放在你的UserControl

 public event EventHandler ValueChanged { add { numericUpDown1.ValueChanged += value; } remove { numericUpDown1.ValueChanged -= value; } } 

那么您的UserControl将具有您通常使用NumericUpDown控件看到的ValueChanged事件。

你可以这样做…..下面的例子显示文本框(用户控制)的值改变

  // Declare a delegate public delegate void ValueChangedEventHandler(object sender, ValueChangedEventArgs e); public partial class SampleUserControl : TextBox { public SampleUserControl() { InitializeComponent(); } // Declare an event public event ValueChangedEventHandler ValueChanged; protected virtual void OnValueChanged(ValueChangedEventArgs e) { if (ValueChanged != null) ValueChanged(this,e); } private void SampleUserControl_TextChanged(object sender, EventArgs e) { TextBox tb = (TextBox)sender; int value; if (!int.TryParse(tb.Text, out value)) value = 0; // Raise the event OnValueChanged( new ValueChangedEventArgs(value)); } }