如何在Usercontrol中创建一个事件并在主窗体中处理它?

Cra*_*893 61 c# user-controls event-handling winforms

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

当用户控件的值发生变化时,如果数字向下,请让主窗体更新显示窗口.

如果NUD不在用户控件中,这不是问题,但我似乎无法弄清楚如何通过mainform而不是usercontrol处理事件.

Jam*_*son 125

您需要为触发用户控件中的事件时引发的用户控件创建事件处理程序.这将允许您将事件冒泡到链中,以便您可以从表单处理事件.

单击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);               
}
Run Code Online (Sandbox Code Playgroud)

形成:

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick);

protected void UserControl_ButtonClick(object sender, EventArgs e)
{
    //handle the event 
}
Run Code Online (Sandbox Code Playgroud)

  • 我无法进行编辑,但是你会将``UserControl1.OnButtonClick``更改为``UserControl1.ButtonClick``吗? (3认同)

Lar*_*ech 20

尝试映射它.尝试将此代码放入您的UserControl:

public event EventHandler ValueChanged {
  add { numericUpDown1.ValueChanged += value; }
  remove { numericUpDown1.ValueChanged -= value; }
}
Run Code Online (Sandbox Code Playgroud)

然后你UserControl将拥有ValueChanged你通常在NumericUpDown控件中看到的事件.

  • 不要在这里使用 *new* 关键字。 (2认同)

Eni*_*ate 11

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

   // 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)); 
    }    
}
Run Code Online (Sandbox Code Playgroud)