【问题标题】:Ensure statement is executed only once when a key is pressed and held.确保语句仅在按住某个键时执行一次。
【发布时间】:2012-03-04 07:46:10
【问题描述】:
如果您按住数字键盘上的 5 键,它将继续执行 KeyDown 事件处理程序中的语句。即使我按住键,如何确保语句只执行一次?
感谢您的关注。
private void form_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.NumPad5)
{
dados.enviar("f"); //I want this to run only once!
}
}
【问题讨论】:
标签:
c#
windows
winforms
keyboard
【解决方案1】:
bool alreadyPressed = false;
...
if (e.KeyCode == Keys.NumPad5 && ! alreadyPressed)
{
alreadyPressed = true;
...
【解决方案2】:
您可以在按下键时设置标志并在按下键时将其重置。
private bool isPressed = false;
public Form1()
{
InitializeComponent();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.B && !isPressed )
{
isPressed = true;
// do work
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (isPressed )
isPressed = false;
}
【解决方案3】:
您应该使用 IsRepeat 标志来检查是否是第一次按键。
if (e.KeyCode == Keys.NumPad5 && !e.IsRepeat)