C# 字符串的键(枚举)
如何将键(KeyEventArgs中的键)转换为字符串 例如,如果用户输入“-”: 我想要的是得到“-”作为结果,而不是“减法”…使用C# 字符串的键(枚举),c#,enums,key,C#,Enums,Key,如何将键(KeyEventArgs中的键)转换为字符串 例如,如果用户输入“-”: 我想要的是得到“-”作为结果,而不是“减法”…使用字典: 班级级别: private readonly Dictionary<string, string> operations = new Dictionary<string, string>; public ClassName() { // put in constructor... operations.Add("S
字典:
班级级别:
private readonly Dictionary<string, string> operations = new Dictionary<string, string>;
public ClassName() {
// put in constructor...
operations.Add("Subtract", "-");
// etc.
}
在您的方法中,只需使用操作[e.Key]
。post生成“Subtract”,因为Key
返回一个KeyCode
,一个枚举,Subtract
是其成员
如果没有显式映射,就无法从中得到“-”。(对于显式映射,请使用开关、if/else、字典或任何您喜欢的工具:-)
要获取字符而不是键代码,可能需要使用不同的事件
快乐编码您可以使用Description属性,然后重写ToString()以获取“-”而不是名称。这里有一篇文章解释了如何执行此操作您可以使用如下函数:
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();
}
}
string key = ((char)e.Key).ToString();
char key = (char)e.key;
如果要将Keys对象转换为string对象,可以使用强制转换,如下所示:
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();
}
}
string key = ((char)e.Key).ToString();
char key = (char)e.key;
请记住,Keys对象可以接受char转换,因此我们可以将结果char对象转换为string对象。
如果您只想将其附加到char对象,只需删除该垃圾,并使其如下所示:
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();
}
}
string key = ((char)e.Key).ToString();
char key = (char)e.key;
我不明白你想干什么。这不是有效的C#代码。对于那些(像我一样)需要查找此代码的人:@Inuyasha他正在尝试找到一个方法,该方法将返回一个键的标准键cap/glyph/symbol,而不是更详细的枚举名。意图很清楚,我想,这可能是一个复制品,它的答案看起来很简单promising@RebeccaScott似乎正好相反。尽管如此,从键代码到字符串的转换仍然是一篇非常有趣的文章。你知道这种技术是否可以应用于现有的类型吗?当然可以。您只需访问源代码即可添加描述属性ah。不过,此枚举是.NET的一部分:(为什么不使用字典?@svick:你说的时候我正在进行更改:)这可能比开关盒
更好。。。我想我会因为建议使用字典而被枪毙@Svick:我以前建议使用enum作为TKey,有几个人告诉我“坏主意”。。。虽然我不明白为什么会这样be@IAbstract,这可能是因为在某些情况下,使用静态属性(如Key.Subtract
)而不是枚举成员的普通类和实例属性(如Key.Char
)而不是您希望放入数组中的对象会更好。但这在这里是不可能的,因为我们无法更改键
。您可以,但它不会有帮助。由于冲突(Key.NumPad0和Key.D0必须具有不同的值,但两者都应产生字符“0”),因此无法在键枚举值和字符集值之间进行双射映射。实际上,键枚举的整个映射不同于任何字符集。只需在Visual Studio中的键枚举上按F12,并说服自己他希望以字符串的形式获取Keys对象的值,而不是相反,因此我可以在这里看到@0xDEADBEEF没有问题