【问题标题】:C#: How do you display the modifier key name + non-modifier key name in this keydown event?C#:如何在这个 keydown 事件中显示修饰键名称 + 非修饰键名称?
【发布时间】:2010-10-15 03:53:02
【问题描述】:

我正在使用此代码来检测是否在文本框的 KeyDown 事件中按下修饰键。

    private void txtShortcut_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Shift || e.Control || e.Alt)
        {
            txtShortcut.Text = (e.Shift.ToString() + e.Control.ToString() + e.Alt.ToString() + e.KeyCode.ToString());

        }
    }

如果同时按下像字母 A 这样的非修饰键,我将如何显示实际的修饰键名称而不是 bool 结果,并在修饰键的末尾显示正在按下的非修饰键时间呢?有没有办法在同一个 txtShortcut.Text = ();线?

【问题讨论】:

标签: c#


【解决方案1】:

您可以检查Control.ModifierKeys - 因为这是一个枚举,它应该更人性化。或者,只是

string s = (e.Shift ? "[Shift]+" : "") + (e.Control ? "[Ctrl]+" : "")
           + (e.Alt ? "[Alt]+" : "") + e.KeyCode;

【讨论】:

    【解决方案2】:

    使用 ?: 运算符

    txtShortcut.Text = (e.Shift? "Shift ": "") + (e.Control? "Control ": "") + (e.Alt? "Alt ": "")  + e.KeyCode.ToString());
    

    【讨论】:

      【解决方案3】:

      您需要根据布尔值显示正确的字符串。要在单个语句中执行此类操作,请使用 ? : 运算符:

      txtShortcut.Text = (e.Shift ? "[Shift]" : string.Empty) + 
                         (e.Control ? "[Ctrl]" : string.Empty) + ...;
      

      一般来说是:

      <someBool> ? <ifTrue> : <ifFalse>
      

      它适用于任何类型。

      【讨论】:

        【解决方案4】:

        如果您使用的是 .NET 3,则需要使用 KeysConverter 类,它支持修饰键的本地化名称:

        var kc = new KeysConverter();
        var result = kc.ConvertToString(e.KeyCode);
        

        否则,你可以用三元运算符自己做:

        var keys = (e.Shift ? "[Shift]+" : string.Empty)
                     + (e.Control ? "[Ctrl]+" : string.Empty)
                     + (e.Alt ? "[Alt]+" : string.Empty)
                     + e.KeyCode;
        

        【讨论】:

          猜你喜欢
          • 2017-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-25
          • 1970-01-01
          • 2011-02-25
          相关资源
          最近更新 更多