【发布时间】:2016-10-13 16:34:20
【问题描述】:
在 Windows 窗体应用程序中,当我使用 Form 的 KeyDown 事件按下热键时,我试图执行某些功能。问题是当我按住热键时,事件会连续触发。
我只想在第一次按下按钮时执行一些功能,在松开按钮时执行另一个功能。
这是我用来完成此操作的代码:
bool isPressed_Num7 = false;
bool isPressed_Num9 = false;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.NumPad7 && !isPressed_Num7)
{
isPressed_Num7 = true;
Console.WriteLine("Keydown 7");
}
if (e.KeyData == Keys.NumPad9 && isPressed_Num9)
{
isPressed_Num9 = true;
Console.WriteLine("Keydown 9");
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.NumPad7)
{
isPressed_Num7 = false;
Console.WriteLine("Keyup 7");
}
if (e.KeyData == Keys.NumPad9)
{
isPressed_Num9 = false;
Console.WriteLine("Keyup 9");
}
}
我将使用一堆热键。那么我要问的是有没有更好的方法来完成我想要做的事情?
【问题讨论】:
-
如果我们知道你想做什么就好了。
-
我认为他想问的是:我如何不为每个必须在事件处理程序中设置为 true 和 false 的键得到一个变量。
-
尝试使用
Keypress而不是Keydown,因为只要按住键,Keydown事件就会循环。 -
@aquinas 这正是我想要做的。
标签: c# winforms keyboard-shortcuts