键(枚举)到字符串

时间:2011-06-27 20:12:06

标签: c# enums key

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

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

e.Key.ToString() = "Subtract"
new KeyConverter().ConvertToString(e.Key) = "Subtract"

我想要的是获得结果的“ - ”,而不是“Substract”......

5 个答案:

答案 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