【问题标题】:KeyPress F1 does not work C#KeyPress F1 不起作用 C#
【发布时间】:2013-07-30 16:04:08
【问题描述】:

我正在设计一个设备应用程序。紧凑框架 2.0

我希望用户按 F1 导航到下一个屏幕,但它不起作用。

似乎找不到解决办法。

有可能吗?

这是我通常使用 Keypress 的方式:

这行得通:

        if (e.KeyChar == (char)Keys.M)
        {
            MessageBox.Show("M pressed");
            e.Handled = true;
        }

这不起作用:

        if (e.KeyChar == (char)Keys.F1)
        {
            MessageBox.Show("F1 pressed");
            e.Handled = true;
        }

【问题讨论】:

  • 你想用 C# 还是 javascript 来实现这个?
  • 您的设备上有功能键 (fn) 吗?换句话说,您是否必须按 fn+F1 才能访问 F1 的功能?
  • @Paddyd 你不需要按功能键
  • @RameshRams 我试过这个例子。它对我不起作用。

标签: c# keypress


【解决方案1】:

参考This

您可以覆盖表单类的ProcessCmdKey 方法并使用keyData == Keys.F1 来检查是否按下了F1。以上链接示例如下。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F1)
    {
        MessageBox.Show("You pressed the F1 key");
        return true;    // indicate that you handled this keystroke
    }

    // Call the base class
    return base.ProcessCmdKey(ref msg, keyData)
}

【讨论】:

    【解决方案2】:

    试试这个

    private void Form1_Load(object sender, EventArgs e)
    {
        this.KeyPreview = true;
        this.KeyDown += new KeyEventHandler(Form1_KeyDown);
    }
    
    void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode.ToString() == "F1")
        {
            MessageBox.Show("F1 pressed");
        }
    }
    

    【讨论】:

    • 虽然这确实有效,但我真的认为您应该考虑其他任何答案 - 使用 Enum 值,而不是比较字符串。
    【解决方案3】:

    某些键(如 f1、f2、箭头键、tab ....)无法被 keychar “捕获”,因为您需要使用 keycode:

    if (e.KeyCode == Keys.F1)
    {
      // do stuff
    }
    

    keychar 属性 - http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.keychar.aspx

    【讨论】:

      【解决方案4】:

      使用KeyDown 代替KeyPress

      private void Form1_KeyDown(object sender, KeyEventArgs e)
      {
          if (e.KeyData == Keys.F1)
          {
              // your code here
          }
      }
      

      还将KeyPreview 设置为true

      【讨论】:

        猜你喜欢
        • 2014-11-24
        • 1970-01-01
        • 2016-02-22
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多