C# KeyPress зарегистрирован дважды
У меня есть приложение Windows Forms с событием нажатия клавиши и события щелчка мышью.
Событие щелчка мыши переходит к событию нажатия клавиши в зависимости от того, где пользователь "щелкнул" (приложение работает на сенсорном ПК в режиме планшета). После каждого "нажатия / нажатия клавиш" я блокирую возможность нажатия с помощью таймера однократного срабатывания в течение 500 мс, чтобы пользователь не получал двойной щелчок и обычно он отлично работает.
Однако, если приложение "зависает" на секунду (перестает отвечать, а затем восстанавливается) или находится в оконном режиме, и я щелкаю вне приложения, если я возвращаюсь в приложение, то оно регистрирует каждый щелчок дважды. Даже если я нажимаю / нажимаю клавишу довольно быстро (чтобы она не превышала блокировку), я получаю результаты нажатия дважды.
Это проблема с потерей фокуса на приложении или может быть другая причина? Кто-нибудь знает какое-либо решение в такой ситуации?
Код нажатия клавиши:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!actionLocked)
{
switch (page)
{
case 0:
KeyPress_0_Page(e);
break;
default:
break;
}
}
}
Код клавиши 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();
}
Mouseclick:
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;
}
}