C# 字符串的键(枚举)

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

如何将键(KeyEventArgs中的键)转换为字符串

例如,如果用户输入“-”:

我想要的是得到“-”作为结果,而不是“减法”…

使用
字典:

班级级别:

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没有问题