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