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

这可能是一个非常简单的问题,但出于某种原因,即使是正确的网络搜索方式,我也不知道……

我正在尝试创建一个由几个标签和进度条组成的用户控件。 但是,我希望整个控件都有一个“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,然后在封闭表单上调用该事件。 所有其余的都显示了消息框。

我觉得这应该是显而易见的,但是一个沮丧的下午让我觉得我错过了一些不言自明的东西,但是当我看到它时,我会感觉自己像一个完整的小丑……任何人都可以停止嘲笑我的愚蠢到足以让我知道我哪里出错了?

对此感到抱歉 – 只是回答一下,万一有人用Google搜索…

如果您有兴趣,这篇文章帮助解决了这个问题: 用户控制点击 – 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中我放置了一个覆盖整个窗体的透明面板,这样当您单击“在窗体上”时,该事件实际上会转到面板控件。