C#:如何在此keydown事件中显示修饰键名+非修饰键名?

时间:2009-03-24 08:37:42

标签: c#

我正在使用此代码来检测修改键是否在文本框的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());

        }
    }

我如何显示实际的修饰键名而不是bool结果,如果同时按下字母A之类的非修饰键,则还会显示在修饰键末尾按下的非修饰键时间呢?有没有办法在同一个txtShortcut.Text =();线?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用?:运算符

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

答案 2 :(得分:0)

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

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

一般来说,它是:

<someBool> ? <ifTrue> : <ifFalse>

适用于任何类型。

答案 3 :(得分:0)

如果您使用的是.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;