2010-05-27 72 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