Я бы пошел с этим решением:
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);
}
... если бы целью было получить числовое значение ярлык ключа, который был пробит.
Нечто подобное должно работать хорошо: (отредактировано)
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;
}
Факты: Клавиатура имеет ключи. Некоторые ключи представляют цифры, а некоторые нет.
Проблема (перефразированная): Получите числовое значение, представленное ключом, если ключ представляет число.
Для решения проблемы необходимо знать, какие ключи (из набора всех ключей) представляют числа, а также точное числовое значение каждого (число) ключ представляет.
Насколько мне известно, нет простого способа получить такое отображение из фреймворка.
Примечание: тот факт, что D0-D9 и NumPad0-NamPad9 являются последовательными в перечислении Keys, является случайным, и полагаться на них Последовательность упорядоченных значений необоснованна.
Таким образом, решение будет таким:
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;
}
Возможно, не самое простое решение , но тот, который моделирует решение близко.
В зависимости от того, сколько ключей вы отслеживаете, самый простой способ - создать регистр выбора ( или переключение оператора в C #, я полагаю?), который проверял бы значение вашей клавиши и в зависимости от этого значения присваивал бы целое число, которое является подходящим.
Если вам нужны числовые значения, вам нужно создать переключатель (e.KeyCode)
заявление и оценить ключ и создать свой собственный инт. Нет простого способа превратить Keys
в числовое значение, которое представляет число на ключе. Самое близкое, что вы можете получить, может быть эквивалент ASCII, который все равно нужно будет перевести.
Не могли бы вы просто прослушать событие KeyPress
? Это даст символ, который был фактически нажат.
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);
}
Чтобы узнать, сколько времени занимает импорт, Простейшим способом, вероятно, является использование модуля 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 ())
Или создайте метод расширения и назовите его как
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... }
}
}
}