Событие KeyDown - как легко знать, является ли нажатая клавиша числовой?

Я в настоящее время обрабатываю событие KeyDown управления DataGridView. Один из столбцов заполнен расчетными значениями, и я хочу, чтобы пользователь смог переопределить значение ячейки, если они хотят.

Когда пользователь нажимает числовую клавишу, ячейка входит в EditMode и позволяет пользователю переопределять значение. Если ключ не является числовым, ничего не происходит...

Это работает вполне прилично..., проблема состоит в том, что я нахожу код для него ужасным... Я, может казаться, не нахожу аккуратный способ обработать все числовые ключи в единственном условии, таким образом, я переключился конструкция случая для контакта со всеми возможными числовыми ключами, как это:

                switch (e.KeyCode)
                {
                    case Keys.D0:
                    case Keys.D1:
                    case Keys.D2:
                    case Keys.D3:
                    case Keys.D4:
                    case Keys.D5:
                    case Keys.D6:
                    case Keys.D7:
                    case Keys.D8:
                    case Keys.D9:
                    case Keys.Decimal:
                    case Keys.NumPad0:
                    case Keys.NumPad1:
                    case Keys.NumPad2:
                    case Keys.NumPad3:
                    case Keys.NumPad4:
                    case Keys.NumPad5:
                    case Keys.NumPad6:
                    case Keys.NumPad7:
                    case Keys.NumPad8:
                    case Keys.NumPad9:

                         [code to make the cell go to editMode, etc...]

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

Все я мог найти Google использования, преобразовывает e. KeyCode к символу, но при использовании числовых ключей, это идет, дает буквы даже для числовых значений...

Спасибо.

9
задан Kharlos Dominguez 1 July 2010 в 10:58
поделиться

4 ответа

Если вы используете событие KeyPress , подпись события будет иметь KeyPressEventArgs с элементом KeyChar , который дает вам символ для клавиш цифровой панели. Вы можете выполнить TryParse, чтобы выяснить, число это или нет.

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    int i;
    if (int.TryParse(e.KeyChar.ToString(), out i))
    {
        MessageBox.Show("Number");
    }
}
11
ответ дан 4 December 2019 в 06:14
поделиться
void dataGridView1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    // Used this to find they key values.
    //label1.Text += e.KeyValue;

    // Check if key is numeric value.
    if((e.KeyValue >= 48 && e.KeyValue <= 57) || (e.KeyValue >= 97 && e.KeyValue <= 105))
        System.Console.WriteLine("Pressed key is numeric");
}
0
ответ дан 4 December 2019 в 06:14
поделиться

Попробуйте

if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
    (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
    e.KeyCode == Keys.Decimal)
{
    // Edit mode
}
14
ответ дан 4 December 2019 в 06:14
поделиться

На странице справки msdn они используют этот код в своем примере:

// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)

...

// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
1
ответ дан 4 December 2019 в 06:14
поделиться
Другие вопросы по тегам:

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