用途:主要是用来解决当客户端长时间不操作时,再次操作需要重新登录验证的,这里是纯客户端的角度去实现这个功能,可以用于单机软件。
-
自定义按钮控件,系统中需要限制操作的地方均需要引用此控件.
public partial class ButtonEx : Button
-
定义一个全局时间变量和超时时间
public static class GlobalData
{
public static DateTime OperationTime=DateTime.Now;
public static int TimeOut = 20;
}
-
在自定义控件中对MouseDown事件进行注册或者重新MouseDown事件
public partial class ButtonEx : Button
{
public ButtonEx()
{
InitializeComponent();
MouseDown += ButtonEx_MouseDown;
}
private void ButtonEx_MouseDown(object sender, MouseEventArgs e)
{
if (GlobalData.OperationTime.AddMinutes(GlobalData.LoginTimer) < DateTime.Now)
{
Enabled = false;
TimerUtils.SetTimeout(1500, () =>
{
BeginInvoke(new Action(() =>
{
Enabled = true;
}));
});
new FormLogin().ShowDialog();
}
else
{
GlobalData.OperationTime = DateTime.Now;
}
}
}
-
在登录成功后对
OperationTime
重新赋值当前时间,并关闭登录页面,注意登录页面的按钮不要使用自定义按钮if (txt_pwd.Text == "123456")
{
GlobalData.OperationTime = DateTime.Now;
DialogResult = DialogResult.OK;
}
else
{
lb_msg.Text = "密码错误";
}
代码解析:为什么使用MouseDown事件来做?因为MouseDown是可以在Click之前触发的,但是在触发MouseDown事件后,Click事件还是会继续触发的,所以在该事件中需要先将按钮设置为不可用,即Enabled = false
,然后在经过短暂的延时后,将按钮重新启用既可防止Click事件的触发;随后就是每次操作都会更新一下操作时间以延迟超时。