2010-05-27 73 views
6

我創建了一個包含按鈕的用戶控件。 我在我的winform上使用這個控件,它將在從數據庫中獲取數據後在運行時加載。如何使用代理和事件處理程序進行用戶控制

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

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

回答

18

你可以做你的用戶控件中的下列創建自己的代表事件:

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. 
+0

不錯的尼克:),你可以請xplain有點abt它。我不太瞭解代表,事件和接口。它是如何工作的。它如何識別按鈕被點擊? – 2010-05-27 10:18:30

+1

基本上,一個委託只是指向一個指定的功能。代表是多播的,這意味着他們可以同時指向多個方法。即調用委託一次將觸發所有附加的方法。沒有人指出我解釋接口,因爲它們在這個問題中是無關緊要的,但是如果你搜索的話,關於它們的問題還有很多。 – GenericTypeTea 2010-05-27 10:22:16

+0

爲什麼我不能寫公共事件int funName;事件真的被接受了嗎? – 2010-05-27 10:27:00

3

沒有必要申報新的代爾加TE。在你的用戶控制中:

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

你不需要innerButton的定義嗎?這是否錯過了一塊? – 1337Rooster 2013-09-08 22:07:17

+0

InnerButtonClick由此行定義:「public event EventHandler InnerButtonClick;」如果您不需要專門的事件處理程序,則無需重新定義基本事件處理程序。 – 2013-11-08 19:01:46