设置用户控件的默认事件

Mah*_*ari 3 .net c# events user-controls winforms

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

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

[DefaultEvent("Click")]
public partial class ucPersonSearch : UserControl
...
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以做以下事情:

[DefaultEvent("btn1_Click")]
public partial class ucPersonSearch : UserControl
...
Run Code Online (Sandbox Code Playgroud)

我希望在btn1被阻止的时候在托管此用户控件的表单中触发一些方法.

这对我的项目来说真的很有针对性,而你的回答将是有价值的.

Moh*_*han 11

您不能将班级成员的事件暴露给班级外部.其他人如何订阅你ClickButton内部活动UserControl?你试过吗?除非您从外部访问按钮,否则这是不可能的,这是不好的(每个人都可以更改所有属性).

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

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用“[DefaultEvent(nameof(MyClick))]”而不是硬编码名称。 (2认同)