C# 按键问题?

C# 按键问题?,c#,.net,winforms,forms,events,C#,.net,Winforms,Forms,Events,我有一个倒计时计时器-用户输入值,然后它启动一个新的表单-一个最小大小的或最大大小的基于从第一个表单中选择的单选按钮。用户控制窗体上有暂停/停止计时器的按钮,等等。但是,如果按下键盘按钮,我还想添加,请执行相同的操作 这是单击暂停按钮的代码 private void btnPause_Click (object sender, EventArgs e) { _CountdownTimer.Pause (); } 这工作正常,如果单击“暂停”按钮,将暂停计

我有一个倒计时计时器-用户输入值,然后它启动一个新的表单-一个最小大小的或最大大小的基于从第一个表单中选择的单选按钮。用户控制窗体上有暂停/停止计时器的按钮,等等。但是,如果按下键盘按钮,我还想添加,请执行相同的操作

这是单击暂停按钮的代码

    private void btnPause_Click (object sender, EventArgs e)
    {
        _CountdownTimer.Pause ();
    }
这工作正常,如果单击“暂停”按钮,将暂停计时器。然后,我尝试为KeyDown添加以下代码-有人知道为什么这不起作用吗?当我按下p键时,它就一直在倒计时

谢谢

    private void btnPause_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode.ToString() == "p")
        {
            _CountdownTimer.Pause();
        }
    }

这是因为
e.KeyCode.ToString()
不返回“p” 正确的代码是:

private void btnPause_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.P)
        {
            _CountdownTimer.Pause();
        }
    }
您应该使用调试器并设置断点,以确保事件正在激发。如果事件确实触发,请确保它输入if。

正确的属性为


最好使用
窗体的KeyDown事件

只有当控件具有焦点时才会触发
KeyDown
事件。您应该使用表单中的
KeyDown
事件检查用户是否按下了
p


此外,e.KeyCode不需要是字符串。只需检查
密钥
枚举。

KeyDown事件提供虚拟密钥。像钥匙一样。如果要检测键入键,如“p”,则应使用KeyPressed事件


但这不是正确的方法。按钮控件已经知道您要显示和处理快捷键。将其文本属性设置为暂停(&Pause)。&字符表示助记符,当用户按住Alt键时,P就会加下划线。按Alt+P会自动调用Click事件。Windows用户界面标准,无需教育用户。这样做的另一个显著优点是按钮不必聚焦。你不必写任何代码。推荐的

如果我没弄错的话,你想要实现的是,当用户在定时器运行时按下“p”按钮时,时钟需要停止。如果按钮未聚焦,则按钮的父级(即窗体本身)将触发keydown事件。
因此,您需要使用Skomski建议的代码来处理表单的KeyDown事件。

这需要form.keydeview=true。重写ProcessCmdKey()是更好的mousetrap.p.s。KeyUp会更好。只要按下该按钮,keydown将持续触发事件。
private void btnPause_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.P)
    {
        _CountdownTimer.Pause();
    }
}