用途:主要是用来解决当客户端长时间不操作时,再次操作需要重新登录验证的,这里是纯客户端的角度去实现这个功能,可以用于单机软件。
-
自定义按钮控件,系统中需要限制操作的地方均需要引用此控件.
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事件的触发;随后就是每次操作都会更新一下操作时间以延迟超时。