【问题标题】:C# key press problem?C#按键问题?
【发布时间】:2011-10-23 03:34:31
【问题描述】:

我有一个倒数计时器 - 用户输入值,然后它开始一个新表单 - 基于从第一个表单中选择的单选按钮的最小尺寸或最大尺寸。用户控件表单上有用于暂停/停止计时器等的按钮。但是,如果按下键盘按钮,我也想添加相同的操作。

这里是点击暂停按钮的代码...

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

【问题讨论】:

    标签: c# .net winforms forms events


    【解决方案1】:

    如果我做对了,您想要实现的是,当用户在计时器运行时按下“p”按钮时,时钟需要停止。在按钮没有获得焦点的情况下,keydown 事件将由按钮的父级触发,即表单本身。 因此,您需要使用 Skomski 提出的代码来处理表单的 KeyDown 事件。

    【讨论】:

    • 附注KeyUp会更好。只要按下按钮,keydown 就会一直触发事件。
    【解决方案2】:

    KeyDown 事件传递虚拟键。像 Keys.P.如果你想检测键入的键,比如“p”,那么你应该使用 KeyPressed 事件。

    但这不是正确的方法。 Button 控件已经知道您可以显示和处理快捷键。将其 Text 属性设置为 &Pause。 & 字符表示助记符,只要用户按住 Alt 键,P 就会被加下划线。按下 Alt+P 会自动调用 Click 事件。 Windows 用户界面标准,无需教育用户。这样做的另一个显着优势是按钮不必聚焦。而且您不必编写任何代码。推荐的。

    【讨论】:

      【解决方案3】:

      正确的属性是KeyCode

      private void btnPause_KeyDown(object sender, KeyEventArgs e)
      {
          if (e.KeyCode == Keys.P)
          {
              _CountdownTimer.Pause();
          }
      }
      

      最好使用Form's KeyDown Event

      【讨论】:

        【解决方案4】:

        那是因为e.KeyCode.ToString() 不返回“p” 正确的代码是:

        private void btnPause_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.P)
                {
                    _CountdownTimer.Pause();
                }
            }
        

        您应该使用调试器并设置断点以确保事件正在触发。如果事件确实触发,请确保它进入 if。

        【讨论】:

          【解决方案5】:

          KeyDown 事件仅在控件具有焦点时触发。您应该使用表单中的KeyDown 事件来检查用户是否按下了p 键。

          另外,e.KeyCode 不需要是字符串。只需检查 Keys 枚举即可。

          【讨论】:

          • 这需要 Form.KeyPreview = true。覆盖 ProcessCmdKey() 是更好的捕鼠器。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多