如何将Key(KeyEventArgs中的Key)转换为字符串。
例如,如果用户输入“ - ”:
e.Key.ToString() = "Subtract"
new KeyConverter().ConvertToString(e.Key) = "Subtract"
我想要的是获得结果的“ - ”,而不是“Substract”......
答案 0 :(得分:7)
使用Dictionary<TKey, TValue>
:
类级:
private readonly Dictionary<string, string> operations = new Dictionary<string, string>;
public ClassName() {
// put in constructor...
operations.Add("Subtract", "-");
// etc.
}
在您的方法中,只需使用operations[e.Key.ToString()]
。
编辑:实际上,为了提高效率:
private readonly Dictionary<System.Windows.Input.Key, char> operations = new Dictionary<System.Windows.Input.Key, char>;
public ClassName() {
// put in constructor...
operations.Add(System.Windows.Input.Key.Subtract, '-');
// etc.
}
在您的方法中,只需使用operations[e.Key]
。
答案 1 :(得分:4)
该帖子会生成“减去”,因为Key
会返回KeyCode
,一个枚举,其中Subtract
是其成员。
如果没有显式映射,就无法获得“ - ”。 (对于显式映射,请使用开关,if / else,Dictionary或您喜欢的任何内容: - )
要获取字符而不是密钥代码,可能会使用其他事件吗?
快乐编码
答案 2 :(得分:2)
好吧,如果要将Keys对象转换为字符串对象,可以使用强制转换,如下所示:
string key = ((char)e.Key).ToString();
请记住,Keys对象可以接受char cast,因此我们可以将结果char对象强制转换为字符串对象。 如果你只想将它附加到一个char对象,只需删除那个废话,然后像这样:
char key = (char)e.key;
答案 3 :(得分:1)
你可以使用这样的函数:
public static string KeycodeToChar(int keyCode)
{
Keys key = (Keys)keyCode;
switch (key)
{
case Keys.Add:
return "+";
case Keys.Subtract:
return "-"; //etc...
default:
return key.ToString();
}
}
答案 4 :(得分:-1)
您可以使用Description属性,然后覆盖ToString()以获取“ - ”而不是名称。这篇文章解释了如何做到http://blogs.msdn.com/b/abhinaba/archive/2005/10/20/c-enum-and-overriding-tostring-on-it.aspx