单击. net (Windows窗体)用户控件的事件

本文关键字:用户 控件 事件 窗体 net Windows 单击 | 更新日期: 2023-09-27 17:53:49

这可能是一个非常简单的问题,但是由于某些原因,甚至连正确的网络搜索答案的方法都不知道…

我正在尝试创建一个由一些标签和进度条组成的用户控件。但是,我希望整个控件都有一个"Click"事件,无论单击控件中的哪个项都将引发该事件。我已经创建了一个"HandleClick"过程,分配给每个控件:

    private void HandleClick(object sender, EventArgs e)
    {
        // Call the callback function, if we were asked to
        if (OnClick != null)
        {
            EventArgs ee = new EventArgs();
            OnClick(this, ee);
        }
        else
        {
            MessageBox.Show("OnClick was null!");
        }
    }

OnClick在这个实例中是一个在控制级别定义的变量:

    public new event EventHandler OnClick;

现在,这只适用于表单。在一个标签上显示MessageBox,然后调用封闭表单上的事件。其余都显示消息框。

我觉得这应该是显而易见的,但一个下午的挫折让我觉得我错过了一些本应不言而喻的东西,但当我看到它时,我会觉得自己像个十足的小丑……有没有人能停止嘲笑我的愚蠢,告诉我哪里出了问题?

单击. net (Windows窗体)用户控件的事件

很抱歉——只是把答案放在上面,以防有人用谷歌搜索…

如果你感兴趣,这篇文章帮助解决了这个问题:用户控制点击- Windows窗体…基本上,删除HandleClick,和属性,并用这个代替:

public new event EventHandler Click
{
    add
    {
        base.Click += value;
        foreach (Control control in Controls)
        {
            control.Click += value;
        }
    }
    remove
    {
        base.Click -= value;
        foreach (Control control in Controls)
        { 
            control.Click -= value;
        }
    }
}

我从来没有在Windows窗体中尝试过,但在其他gui中,我放置了一个覆盖整个窗体的透明面板,这样当您单击"on the form "时,事件实际上会转到面板控件。