【问题标题】: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)
        

        【讨论】:

          猜你喜欢
          • 2012-12-31
          • 1970-01-01
          • 1970-01-01
          • 2012-06-09
          • 2021-12-23
          • 2014-08-19
          • 1970-01-01
          • 2017-06-22
          • 2014-12-14
          相关资源
          最近更新 更多