【问题标题】:How to detect if ANY keyboard Function key has been pressed?如何检测是否按下了任何键盘功能键?
【发布时间】:2012-12-12 14:51:39
【问题描述】:

我想知道是否有一种方法可以检测是否在一个语句中按下了任何功能键盘键,而不是像这样列出它们:

if( !(e.Key == Key.F1) && !(e.Key == Key.F2) && !(e.Key == Key.F3) ...... !(e.Key == Key.F12))

【问题讨论】:

标签: c# .net wpf .net-4.0


【解决方案1】:

一种解决方案是:

var key = e.SystemKey == Key.None ? e.Key : e.SystemKey;
if(key >= Key.F1 && key <= Key.F12)

【讨论】:

  • 这实际上不一定能检测到 F10
  • 您可以安全地假设Key.F1 &lt; Key.F2 &lt; Key.F3 等并且没有间隙,即(int)Key.F1 == (int)Key.F2-1 == (int)Key.F3-2 等吗?这是在某处记录的吗?
  • @Alan:确实如此:Assert.Equal(99, Key.F10);
  • @DanielHilgarth 是的,但是按 F10 你会得到 156 的值!
  • @Clemens:不幸的是,这没有记录。至少 MSDN 上没有:msdn.microsoft.com/en-us/library/…
【解决方案2】:

似乎 F 键的值都是连续的 F1 = 90 F12 = 101

但是通常按 F10 会导致意外的结果,

156(系统)

因此可能会很想进行范围检查,例如

Key actualKey = (e.SystemKey == Key.None) ? e.Key : e.SystemKey;
if(actualKey >= Key.F1 && actualKey <= Key.F12)
// F Key was pressed

这可能没问题,可以检测任何 F 键。但我也喜欢这个使用开关的解决方案:

Key actualKey = (e.SystemKey == Key.None) ? e.Key : e.SystemKey;
switch (actualKey)
        {
            case Key.F1:
            case Key.F2:
            case Key.F3:
            case Key.F4:
            case Key.F5:
            case Key.F6:
            case Key.F7:
            case Key.F8:
            case Key.F9:
            case Key.F10:
            case Key.F11:
            case Key.F12:
                // fkey
                break;

            default:
                // no fkey

                break;
        }

【讨论】:

  • @DanielHilgarth 确实如此,但这不是由于某种原因按下它时返回的内容。
猜你喜欢
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2010-12-17
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多