Как я преобразовываю перечисление значений “Ключей” в “международный” символ в C#?

Вы можете изменить его в настройках проигрывателя соответственно в зависимости от платформы.

Inspecter panel screen shot

7
задан Jhonny D. Cano -Leftware- 20 April 2009 в 18:35
поделиться

10 ответов

Я бы пошел с этим решением:

int value = -1;
if (e.KeyValue >= ((int) Keys.NumPad0) && e.KeyValue <= ((int) Keys.NumPad9)) { // numpad
    value = e.KeyValue - ((int) Keys.NumPad0);
} else if (e.KeyValue >= ((int) Keys.D0) && e.KeyValue <= ((int) Keys.D9)) { // regular numbers
    value = e.KeyValue - ((int) Keys.D0);
}

... если бы целью было получить числовое значение ярлык ключа, который был пробит.

15
ответ дан 6 December 2019 в 06:25
поделиться

Нечто подобное должно работать хорошо: (отредактировано)

int keyVal = (int)e.KeyValue;
int value = -1;
if ((keyVal >= (int)Keys.D0 && keyVal <= (int)Keys.D9)
{
    value = (int)e.KeyValue - (int)Keys.D0;
}
else if (keyVal >= (int)Keys.NumPad0 && keyVal <= (int)Keys.NumPad9)
{
    value = (int)e.KeyValue - (int)Keys.NumPad0;
}
5
ответ дан 6 December 2019 в 06:25
поделиться

Факты: Клавиатура имеет ключи. Некоторые ключи представляют цифры, а некоторые нет.

Проблема (перефразированная): Получите числовое значение, представленное ключом, если ключ представляет число.

Для решения проблемы необходимо знать, какие ключи (из набора всех ключей) представляют числа, а также точное числовое значение каждого (число) ключ представляет.

Насколько мне известно, нет простого способа получить такое отображение из фреймворка.

Примечание: тот факт, что D0-D9 и NumPad0-NamPad9 являются последовательными в перечислении Keys, является случайным, и полагаться на них Последовательность упорядоченных значений необоснованна.

Таким образом, решение будет таким:

  1. Определите, представляет ли данный ключ число.
  2. Возвращает числовое значение ключа, если ключ представляет число.

private static readonly IDictionary<Keys, int> NumericKeys = 
    new Dictionary<Keys, int> {
        { Keys.D0, 0 },
        { Keys.D1, 1 },
        { Keys.D2, 2 },
        { Keys.D3, 3 },
        { Keys.D4, 4 },
        { Keys.D5, 5 },
        { Keys.D6, 6 },
        { Keys.D7, 7 },
        { Keys.D8, 8 },
        { Keys.D9, 9 },
        { Keys.NumPad0, 0 },
        { Keys.NumPad1, 1 },
        { Keys.NumPad2, 2 },
        { Keys.NumPad3, 3 },
        { Keys.NumPad4, 4 },
        { Keys.NumPad5, 5 },
        { Keys.NumPad6, 6 },
        { Keys.NumPad7, 7 },
        { Keys.NumPad8, 8 },
        { Keys.NumPad9, 9 }
   };

private int? GetKeyNumericValue(KeyEventArgs e) {
    if (NumericKeys.ContainsKey(e.KeyCode)) return NumericKeys[e.KeyCode];
    else return null;
}

Возможно, не самое простое решение , но тот, который моделирует решение близко.

5
ответ дан 6 December 2019 в 06:25
поделиться

В зависимости от того, сколько ключей вы отслеживаете, самый простой способ - создать регистр выбора ( или переключение оператора в C #, я полагаю?), который проверял бы значение вашей клавиши и в зависимости от этого значения присваивал бы целое число, которое является подходящим.

2
ответ дан 6 December 2019 в 06:25
поделиться

Если вам нужны числовые значения, вам нужно создать переключатель (e.KeyCode) заявление и оценить ключ и создать свой собственный инт. Нет простого способа превратить Keys в числовое значение, которое представляет число на ключе. Самое близкое, что вы можете получить, может быть эквивалент ASCII, который все равно нужно будет перевести.

2
ответ дан 6 December 2019 в 06:25
поделиться

Не могли бы вы просто прослушать событие KeyPress ? Это даст символ, который был фактически нажат.

1
ответ дан 6 December 2019 в 06:25
поделиться

It's not a Rails plugin, but http://www.owasp.org/ is a good place to start.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    int num = GetKeyValue(e.KeyValue);  
}
1
ответ дан 6 December 2019 в 06:25
поделиться

Чтобы узнать, сколько времени занимает импорт, Простейшим способом, вероятно, является использование модуля timeit ..

>>> import timeit
>>> t = timeit.Timer('import urllib')
>>> t.timeit(number = 1000000)
0.98621106147766113

Итак, чтобы импортировать urllib 1 миллион раз, это заняло чуть меньше секунды (на Macbook Pro) ..

У меня есть мастер-скрипт, который импортирует другие модули. Мне нужно вычислить, сколько времени это займет

. Если вы имеете в виду общее время выполнения скрипта, то в Linux / OS X / Cygwin вы можете запустить скрипт, используя команду time , для пример:

$ time python myscript.py 

real    0m0.046s
user    0m0.024s
sys     0m0.020s

(помните, что включает в себя все время запуска интерпретатора Python, а также фактическое время выполнения кода, хотя оно ' Чтобы получить его числовое значение, вы должны найти символ для нажатой клавиши, а затем проанализировать его из символа в целое число.

Что-то вроде Convert.ToInt32 (e.KeyCode.ToString ())

0
ответ дан 6 December 2019 в 06:25
поделиться

Или создайте метод расширения и назовите его как

private void Form1_KeyDown(object sender, KeyEventArgs e)
{    
    int num = e.KeyValue.GetKeyValue();  
}

, где метод расширения равен

public static class MyExtensions
{
    public static int GetKeyValue(this int keyValue)
    {

        if (keyValue >= 48 && keyValue <= 57)
        {
            return keyValue - 48;
        }
        else if (keyValue >= 96 && keyValue <= 105)
        {
            return keyValue - 96;
        }
        else
        {
            return -1; // Not a number... do whatever...    }

        }
    }
}
0
ответ дан 6 December 2019 в 06:25
поделиться

int i = (int) e.KeyValue;

-3
ответ дан 6 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: