一尘不染

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

c#

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

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

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


阅读 220

收藏
2020-05-19

共1个答案

一尘不染

您需要为用户控件创建事件处理程序,该事件处理程序在触发用户控件中的事件时引发。这将使您能够在事件链上冒泡,以便可以从表单中处理事件。

当点击Button1UserControl时,我将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);,它的作用基本相同,但更短。

  • Browsable属性使事件在Visual Studio的设计器(事件视图)中可见,Category并在“动作”类别中显示该事件,并Description提供对其的描述。您可以完全省略这些属性,但是由于VS可以为您处理,因此使设计者可以轻松使用它们。

2020-05-19