簡體   English   中英

如何使用委托和事件處理程序進行用戶控制

[英]How to work with delegates and event handler for user control

我創建了一個包含按鈕的用戶控件。 我在我的winform上使用這個控件,它將在從數據庫中獲取數據后在運行時加載。

現在我需要從該按鈕的Click事件中的數據表中刪除一行。

問題是我如何在表單中捕獲該事件。 目前它進入用戶控件的btn點擊事件定義。

您可以通過在用戶控件中執行以下操作來創建自己的委托事件:

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.

沒有必要聲明新的委托。 在您的用戶控件中:

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
    }
  }
}

只是現代化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
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM