猿问

如何在用户控件中创建事件并在主窗体中处理它?

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

每当该用户控件的值上下数字更改时,请使主窗体更新显示窗口。

如果NUD不在用户控件中,那么这不是问题,但是我似乎无法弄清楚如何由主窗体而不是用户控件来处理事件。


30秒到达战场
浏览 534回答 3
3回答

呼啦一阵风

您需要为用户控件创建事件处理程序,该事件处理程序在触发用户控件中的事件时引发。这将使您能够在事件链上冒泡,以便可以从表单中处理事件。当点击Button1UserControl时,我将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将拥有ValueChanged通常在NumericUpDown控件中看到的事件。

一只甜甜圈

您可以这样做.....下面的示例显示文本框(用户控件)的值已更改   // 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));     }    }
随时随地看视频慕课网APP
我要回答