小编典典

处理表单上所有控件的单击

c#

我有一个.NET UserControl(FFX 3.5)。此控件包含几个子控件-
一个面板,几个标签,几个TextBoxes和另一个自定义控件。我想在基本控件上的任何位置处单击鼠标右键-
因此,在任何子控件上(或在Panel中,是一个孩子的子控件)都可以右键单击。我想这样做,以便在某人对控件进行更改而不必为例如新控件插入处理程序时就可以维护。

首先,我尝试覆盖WndProc,但是据我所怀疑,我仅直接获得有关单击窗体的消息,而不是窗体的任何子窗体。作为半黑客,我在InitializeComponent之后添加了以下内容:

  foreach (Control c in this.Controls)
  {
    c.MouseClick += new MouseEventHandler(
      delegate(object sender, MouseEventArgs e)
      {
        // handle the click here
      });
  }

现在,这会获得支持事件的控件的点击,但是,例如,Labels仍然无法获得任何东西。有一个简单的方法可以让我忽略吗?


阅读 242

收藏
2020-05-19

共1个答案

小编典典

如果标签位于子控件中,则必须递归执行此操作:

void initControlsRecursive(ControlCollection coll)
 { 
    foreach (Control c in coll)  
     {  
       c.MouseClick += (sender, e) => {/* handle the click here  */});  
       initControlsRecursive(c.Controls);
     }
 }

/* ... */
initControlsRecursive(Form.Controls);
2020-05-19