检测任何控制按下

时间:2016-12-15 07:34:01

标签: c#

我正在设计一个小应用程序,在其中我打开一个带有一些控件的新表单。如果闲置一段时间,我想关闭此表单。假设表单中有许多按钮,滚动条,图片框....如果没有单击它们(在10秒内),表单应该关闭。

我使用了10秒的计时器,如果按下任何控件,我想重置它。我可以单独完成它,但是对于所有控件都会变得非常麻烦。我能用一些更简单的方式做到这一点......我在网上看到了:

String

但不知道如何使用它。请帮忙。

3 个答案:

答案 0 :(得分:0)

这应该让你入门

    private void Form1_Load(object sender, EventArgs e)
    {
        foreach(Control control in this.Controls)
        {
            control.Click += Oncontrol_Click;
        }
    }

    private void Oncontrol_Click(object sender, EventArgs e)
    {
        Control control = sender as Control;
        MessageBox.Show($"{control.Text} is clicked");
    }

答案 1 :(得分:0)

您可以将click事件绑定到foreach循环内的所有控件。

foreach (Control c in Controls)
{
    c.Click += (o, args) => ResetTimer();
}

现在每次用户点击某个控件时,ResetTimer()都会被触发。

答案 2 :(得分:0)

您需要执行此操作,将点击事件添加到表单上所有控件:

    private void Form1_Load(object sender, EventArgs e)
    {
        AttachHandler(this, (s, e2) => ResetTimer());
    }

    private void AttachHandler(Control control, EventHandler handler)
    {
        control.Click += handler;
        foreach (Control c in control.Controls)
        {
            AttachHandler(c, handler);
        }
    }

它需要递归地关闭所有可以包含其他控件的控件。