Ключ (enum) к строке - PullRequest
       23

Ключ (enum) к строке

4 голосов
/ 28 июня 2011

Как я могу преобразовать Key (Key in KeyEventArgs) в строку.

Например, если пользователь вводит «-»:

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

Я хочу получить "-" за результат, а не "Substract" ...

Ответы [ 5 ]

7 голосов
/ 28 июня 2011

Используйте 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].

4 голосов
/ 28 июня 2011

Пост генерирует «Вычитать», потому что Key возвращает KeyCode, перечисление, членом которого является Subtract.

Без явного сопоставления невозможно получить "-" из этого. (Для явного сопоставления используйте переключатель, если / еще, Словарь, или что вам нравится: -)

Чтобы получить символ , а не код клавиши , возможно, используйте другое событие?

Счастливое кодирование

2 голосов
/ 16 мая 2012

Ну, вы можете использовать приведение, если хотите преобразовать объект Keys в строковый объект, например так:

string key = ((char)e.Key).ToString();

Просто помните, что объект Keys может принимать приведение типа char, поэтому мы можемприведите получившийся объект char к строковому объекту.Если вы хотите просто добавить его к объекту char, просто удалите это дерьмо и сделайте так:

char key = (char)e.key;
1 голос
/ 28 июня 2011

Вы можете использовать такую ​​функцию:

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();
    }
}
0 голосов
/ 28 июня 2011

Вы можете использовать атрибуты Description и затем переопределить ToString (), чтобы получить «-» вместо имени. Вот статья, которая объясняет, как это сделать http://blogs.msdn.com/b/abhinaba/archive/2005/10/20/c-enum-and-overriding-tostring-on-it.aspx

...