Как использовать события клавиатуры для остановки таймера в формах Windows? - PullRequest
0 голосов
/ 07 мая 2020

Я хочу остановить таймер, работающий в моей Windows форме, нажав любую клавишу на клавиатуре. У вас есть идеи?

Например, внутри моей формы я пробую это:

myTimer.Tick += new EventHandler(TimerEventProcessor);
myTimer.Interval = 400;
if (Keyboard.IsKeyDown(Key.Enter))
{
    if (myTimer.Enabled)
         myTimer.Stop();
}

Проблема даже в том, что я уже добавил сборку PresentationCore.dll но Клавиатура в приведенном выше коде не распознается. И я столкнулся с этой ошибкой:

!!! «клавиатура с именем не существует в текущем контексте»

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Также необходимо добавить ссылку WindowsBase.dll.

И проверьте это в обработчике таймера.

int i = 0;
private void timer1_Tick(object sender, EventArgs e)
{
    Console.WriteLine(i++);

    if (System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key.Enter))
    {
        timer1.Enabled = false;
        MessageBox.Show("Timer Stopped");
    }
}

private void Form1_Load(object sender, EventArgs e)
{
    timer1.Enabled = true;
}
1 голос
/ 07 мая 2020

Вы можете добавить KeyPressEventHandler в конструктор вашей формы и остановить таймер в этом обработчике. Этот код предполагает, что myTimer доступен в OnKeyPress, например, это частное поле этой формы.

Подробнее см. в документации .

public MyForm
{
    this.KeyPress += new KeyPressEventHandler(OnKeyPress);
}

void OnKeyPress(object sender, KeyPressEventArgs e)
{
    if (myTimer.Enabled)
         myTimer.Stop();
}
...