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();
}
}