【问题标题】:User Control with multiple controls handle click具有多个控件的用户控件处理单击
【发布时间】:2017-03-11 18:07:24
【问题描述】:

我有一个用户控件,上面有 3 个标签。我希望在画布上的任何点(甚至在标签中)单击控件时,都会引发父表单上的单击事件。它就像一个带有 3 个标签的按钮......现在它只会在单击基本画布部分时引发父事件,但在单击标签时不会冒泡。 首先,在构造函数中分配事件处理程序:

public partial class RunCodeButton : UserControl
{
    public event EventHandler ButtonClick;

    public RunCodeButton()
    {
        InitializeComponent();
        LblCode.Click += RunCodeButton_Click;
        LblCount.Click += RunCodeButton_Click;
        LblDescription.Click += RunCodeButton_Click;
    }
}

然后我将用户控件的点击事件添加到类中:

    private void RunCodeButton_Click(object sender, EventArgs e)
    {
        ButtonClick?.Invoke(this, e);
    }

然后,在主窗体(不是用户控件)中,我在生成按钮时添加点击事件:

 _button.Click += Button_Click;
 private void Button_Click(object sender, EventArgs e) 
 {
        Result = DialogResult.OK;
        RunCode = (Codes_Run)((RunCodeButton)sender).Tag;
        Close();
 }

如果我在用户控件单击事件中设置断点,然后单击标签。它引发了事件,但 'ButtonClick' 始终为 null 并停在那里。

有没有办法让用户控件的子控件点击事件冒泡?

【问题讨论】:

标签: c# winforms events user-controls


【解决方案1】:

添加

_button.ButtonClick += Button_Click;

绕线

_button.Click += Button_Click;

虽然你甚至不需要_button.ButtonClick。干脆做

private void RunCodeButton_Click(object sender, EventArgs e)
{
    Click?.Invoke(this, e);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多