C#KeyPress注册了两次

时间:2018-04-15 08:55:58

标签: c# winforms keypress double-click mouseclick-event

我有一个带有按键事件和鼠标点击事件的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;
        }
}

0 个答案:

没有答案