从UserControl中动态添加的按钮获取事件

本文关键字:按钮 获取 事件 添加 UserControl 动态 | 更新日期: 2023-09-27 18:15:37

我想获得Button的点击事件,这是在我的UserControl中,我在我的表单中动态添加了UserControl。我希望在我添加UserControlForm中提出该事件。如果有人能建议我正确的方法,那将非常有帮助。

从UserControl中动态添加的按钮获取事件

您需要在用户控件中公开事件,然后在将用户控件添加到表单时订阅它。例如:

public partial MyUserControl:Control
{
   public event EventHandler ButtonClicked;
   private void myButtonClick(object sender, EventArgs e)
   {
      if (this.ButtonClicked != null)
         this.ButtonClicked(this, EventArgs.Empty);
   }
}
public partial MyForm:Form
{
   private void MethodWhereYouAddTheUserControl()
   {
       var myUC = new MyUserControl();
       myUC += myUC_ButtonClicked;
       // code where you add myUC to the form...
   }
   void myUC_ButtonClicked(object sender, EventArgs e)
   {
      // called when the button is clicked
   }
}

我猜你是使用Winforms指你的标题。

你可以做什么来转发你的Click事件

在你的UserControl

public class MyUserControl
{
    public event EventHandler MyClick;
    private void OnMyClick()
    {
        if (this.MyClick != null)
            this.MyClick(this, EventArgs.Empty);
    }
    public MyUserControl()
    {
        this.Click += (sender, e) => this.OnMyClick();
    }
}

为您的自定义用户控件添加您自己的事件。

在你的客户用户控件中,一旦你添加了按钮,也附加了你的(内部)事件处理程序,它将引发你自己的公共事件,并以某种方式告诉事件处理程序哪个按钮被点击了(你很可能需要你自己的委托)。

一旦完成,您的表单可以添加自己的事件处理程序,就像您添加一个标准控件。

重读你的问题,这可能不是确切的结构(按钮是固定的,但用户控件是动态添加的?)无论如何,它应该是几乎相同的,它只是在创建时添加事件处理程序的位置/时间不同。


如果你使用的是Windows窗体,那么使用一个静态按钮就容易多了。

在您的自定义用户控件中:

public event EventHandler ButtonClicked; // this could be named differently obviously
...
public void Button_OnClick(object sender, EventArgs e) // this is the standard "on button click" event handler created using the form editor
{
    if (ButtonClicked != null)
        ButtonClicked(this, EventArgs.Empty);
}

在你的表单中:

// create a new user control and add the event
MyControl ctl = new MyControl();
Controls.Add(ctl);
ctl.ButtonClicked += new EventHandler(Form_OnUserControlButtonClicked); // name of the event handler in your form that's called once you click the button
...
private void Form_OnUserControlbuttonClicked(object sender EventArgs e)
{
    // do whatever should happen once you click the button
}
  1. 当您将usercontrol添加到form时,注册点击事件(如果是public) usercontrol.button.Click += new EventHandler(usercontrolButton_Click);

  2. usercontrol中注册按钮的Click事件