我正在设计一个小应用程序,在其中我打开一个带有一些控件的新表单。如果闲置一段时间,我想关闭此表单。假设表单中有许多按钮,滚动条,图片框....如果没有单击它们(在10秒内),表单应该关闭。
我使用了10秒的计时器,如果按下任何控件,我想重置它。我可以单独完成它,但是对于所有控件都会变得非常麻烦。我能用一些更简单的方式做到这一点......我在网上看到了:
String
但不知道如何使用它。请帮忙。
答案 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);
}
}
它需要递归地关闭所有可以包含其他控件的控件。