如何在用户控件中创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)); } }