如何使用委托和事件处理程序进行用户控制

Sha*_*pta 8 c# user-controls delegates event-handling custom-event

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

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

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

djd*_*d87 21

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

public event UserControlClickHandler InnerButtonClick;
public delegate void UserControlClickHandler (object sender, EventArgs e);
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法从处理程序中调用事件:

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

然后你可以使用挂钩事件

UserControl.InnerButtonClick+= // Etc.
Run Code Online (Sandbox Code Playgroud)


Ché*_*Don 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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)