8

我创建了一个包含按钮的用户控件。我在我的 winform 上使用这个控件,它将在从数据库中获取数据后在运行时加载。

现在我需要在该按钮的 Click 事件上从数据表中删除一行。

问题是我如何在我的表单中捕获该事件。目前它进入该用户控件的 btn 点击事件定义。

4

3 回答 3

21

您可以通过在用户控件中执行以下操作来创建自己的委托事件:

public event UserControlClickHandler InnerButtonClick;
public delegate void UserControlClickHandler (object sender, EventArgs e);

您使用以下命令从处理程序调用事件:

protected void YourButton_Click(object sender, EventArgs e)
{
   if (this.InnerButtonClick != null)
   {
      this.InnerButtonClick(sender, e);
   }
}

然后你可以使用

UserControl.InnerButtonClick+= // Etc.
于 2010-05-27T10:13:12.490 回答
6

没有必要声明一个新的委托。在您的用户控件中:

public class MyControl : UserControl
{
  public event EventHandler InnerButtonClick;
  public MyControl()
  {
    InitializeComponent();
    innerButton.Click += new EventHandler(innerButton_Click);
  }
  private void innerButton_Click(object sender, EventArgs e)
  {
    if (InnerButtonClick != null)
    {
      InnerButtonClick(this, e); // or possibly InnerButtonClick(innerButton, e); depending on what you want the sender to be
    }
  }
}
于 2012-04-12T16:55:56.933 回答
0

只是将 ChéDon的答案现代化,以下是您在 2018 年的做法:

public class MyControl : UserControl
{
  public event EventHandler InnerButtonClick;

  public MyControl()
  {
    InitializeComponent();
    innerButton.Click += innerButton_Click;
  }

  private void innerButton_Click(object sender, EventArgs e)
  {
      InnerButtonClick?.Invoke(this, e);
      //or
      InnerButtonClick?.Invoke(innerButton, e); 
      //depending on what you want the sender to be
  }
}
于 2018-08-28T20:20:37.873 回答