【发布时间】:2013-10-23 10:30:00
【问题描述】:
我想统计一个窗口中的所有mouseclicks。我希望计数器在我单击的每个对象上增加,即使它是一个按钮、它自身的形式或 textbox 等等等。
到目前为止我有这个,但我似乎无法让它工作:
int mouseCounter = 0;
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
{
c.Click += ClickCounter;
}
}
void ClickCounter(object sender, EventArgs e)
{
mouseCounter++;
label8.Text = mouseCounter.ToString();
}
计数器现在只响应点击控件而不是它自己的表单。我怎样才能简单地解决这个问题?
【问题讨论】:
-
您可能必须使用递归函数来获取表单上存在的所有控件(
this.Controls过于严格,只会检索“第一级控件”):例如,请参见 stackoverflow.com/questions/2525062/… -
我刚刚开始了一个新项目,我只输入了这段代码、几个按钮、几个文本框和一个面板。现在计数器响应每个元素的每次点击,但当我点击它自己的表单时不会增加。所以现在它的行为与以前完全相反,但代码完全相同。
-
好吧,在你的新项目中,如果你在面板上添加一个按钮(或任何其他控件)肯定不会工作......我认为在你的“旧”项目中,你有“整个表单”上的面板,或类似的东西(其他控件是此面板/控件的子级,因此此面板是唯一响应单击事件的面板。在您的新项目中,如果您没有一个“主面板”,您还应该添加类似
this.Click +=ClickCounter -
是的,你是对的,我第一次点击了分组框。计数器确实响应所有按钮或所有文本框或我添加到表单的所有其他控件。所以问题是当我点击它自己的表单时没有注册鼠标点击。