Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保在按住键时只执行一次语句。_C#_Windows_Winforms_Keyboard - Fatal编程技术网

C# 确保在按住键时只执行一次语句。

C# 确保在按住键时只执行一次语句。,c#,windows,winforms,keyboard,C#,Windows,Winforms,Keyboard,如果按住numpad上的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! } } 谢谢你的

如果按住numpad上的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!
   }
}
谢谢你的关注

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!
   }
}

您可以在向下键上设置标志,在向上键上重置标志

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!
   }
}
    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;
    }

您应该使用IsRepeat标志检查是否是第一次按下按键

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!
   }
}
if (e.KeyCode == Keys.NumPad5 && !e.IsRepeat)