【问题标题】:How to use Keyboard events to stop a Timer in Windows Forms?如何使用键盘事件来停止 Windows 窗体中的计时器?
【发布时间】:2020-08-22 03:17:09
【问题描述】:

我想通过按键盘上的任意键来停止在我的 Windows 窗体中运行的计时器。 你有什么想法吗?

例如,在我的表单中,我正在尝试这个:

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

问题是即使我已经添加了程序集PresentationCore.dll,但无法识别上面代码中的Keyboard。我正面临这个错误:

!!! "名称键盘在当前上下文中不存在"

【问题讨论】:

  • 你的问题应该是如何监听键盘事件,这绝对是重复的
  • @MichaelRandall 我已更改标题。谢谢:)

标签: c# winforms timer visual-studio-2017 keyboard


【解决方案1】:

您还需要添加引用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;
}

【讨论】:

  • 仍然出现此错误:命名空间'System.Windows.Input'中不存在类型或命名空间名称键盘
  • @VanMinhNhonTRUONG 我添加了参考 WindowsBasePresentationCore ,它在几台机器上都可以正常工作。你是按步骤添加的吗Project => Add Reference...
  • @VanMinhNhonTRUONG 应该是PresentationCore,而不是System.Windows.Presentation
【解决方案2】:

您可以在 Form 的构造函数中添加 KeyPressEventHandler 并在此处理程序中停止计时器。此代码假定 myTimer 可在 OnKeyPress 中访问,例如是此表单的私有字段。

the documentation阅读更多内容。

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

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

【讨论】:

  • 非常感谢您的回答。但是如果我的表单不是桌面上显示的第一个应用程序,这不起作用,因为我们没有按表单上的键...
  • 没错。然后事情变得有点复杂,你必须像this文章那样注册一个全局热键。而here 是一些与 WinForms 直接相关的问题。
  • 是的,它似乎更复杂......我正在尝试另一种方法来做到这一点(例如,通过使用另一个计时器)。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多