3

我有一个User Control包含一堆控件。我想将此的默认事件设置为我的一个按钮User ControlClick事件。

我知道要将默认事件设置为 UserControl 的事件之一,我应该添加属性:

[DefaultEvent("Click")]
public partial class ucPersonSearch : UserControl
...

我想知道是否可以执行以下操作:

[DefaultEvent("btn1_Click")]
public partial class ucPersonSearch : UserControl
...

我想在 btn1 被点击时以托管此用户控件的形式触发一些方法。

这在我的项目中确实很重要,您的回答将是有价值的。

4

1 回答 1

12

您不能将班级成员的事件暴露给班级之外。别人怎么能订阅你里面的Click事件呢?你试过了吗?除非您使按钮可以从外部访问,否则这是不可能的,这不好(每个人都可以更改所有属性)。ButtonUserControl

您必须定义一个新事件,并在您想要的事件(单击按钮)发生时触发您的新事件:

[DefaultEvent("MyClick")]
public partial class UCPersonSearch : UserControl
{
    Button btnSearch;
    public event EventHandler MyClick;

    public UCPersonSearch()
    {
        btnSearch = new Button();
        //...

        btnSearch.Click += new EventHandler(btnSearch_Click);
    }

    void btnSearch_Click(object sender, EventArgs e)
    {
        OnMyClick();
    }

    protected virtual void OnMyClick()
    {
        var h = MyClick;
        if (h != null)
            h(this, EventArgs.Empty);
    }
}
于 2013-02-19T11:51:23.470 回答