【问题标题】:Set User Control's default event设置用户控件的默认事件
【发布时间】:2013-02-19 11:45:39
【问题描述】:

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

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

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

我想知道是否可以这样做:

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

我想在点击 btn1 时在托管此用户控件的表单中触发一些方法。

这对我的项目来说真的很重要,你的回答会很有价值。

【问题讨论】:

  • ???我不知道你想说什么。

标签: c# .net winforms events user-controls


【解决方案1】:

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

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

[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);
    }
}

【讨论】:

  • 感谢@MD.Unicorn 好主意,在阅读您的答案之前,提出了公开按钮的想法,并且成功了。你的回答也很好,甚至更好。好锁。
  • @MahdiTahsildari 不客气,我的同胞 :-)
  • 使用 [DefaultEvent(nameof(MyClick))] 而不是硬编码名称。
  • @jor 感谢您指出这一点,但在引入此功能的 C# 6 (2015) 之前编写的答案战争。 :) 由于历史原因,并且 WinForms 平台不再被积极使用,我将保持这样的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2017-12-18
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
相关资源
最近更新 更多