我有一个带有按键事件和鼠标点击事件的Windows窗体应用程序。
鼠标点击事件转发到按键事件,具体取决于用户“点击”的位置(应用程序在平板电脑模式下在触摸屏电脑上运行)。在每次“点击/按键”之后,我阻止了使用单触发计时器点击500毫秒的可能性,因此用户不会得到双击,通常效果很好。
但是,如果应用程序“挂起”一秒钟(停止响应然后恢复)或处于窗口模式并且我在应用程序外单击,如果我返回应用程序,则它会每次点击两次。即使我快速点击/按键(它不会超过锁定),我也会得到两次点击的结果。
关注应用程序是否存在问题,或者可能还有其他原因?有谁知道这种情况的任何解决方案?
Keypress代码:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!actionLocked)
{
switch (page)
{
case 0:
KeyPress_0_Page(e);
break;
default:
break;
}
}
}
Keypress 0代码:
private void KeyPress_0_Page(KeyPressEventArgs e)
{
if (e.KeyChar == key_l4)
{
//do something
page = 0;
Load_page(page);
}
}
加载页面:
public void Load_Page(int page)
{
actionLocked = true;
actionLock.Start();
switch (page)
{
case 0:
Page_0();
break;
default:
break;
}
}
定时器设置:
actionLock = new System.Timers.Timer();
actionLock.Interval = 500; // 0,5s
actionLock.Elapsed += new ElapsedEventHandler(actionLockTick);
actionLock.Stop();
计时器打勾:
private void actionLockTick(object sender, EventArgs e)
{
actionLocked = false;
actionLock.Stop();
}
鼠标点击:
private void pb1_MouseClick(Object sender, MouseEventArgs e)
{
int maxH = 1080;
int maxW = 1920;
int x = e.X*maxW/pb1.Width;
int y = e.Y*maxH/pb1.Height;
PointF pt = new PointF(x, y);
if(isInRect(cmlang1,pt)) //checking if click is in a rectangle on screen
{
SendKeys.Send("r");
return;
}
}