2009-03-04 8 views
3

У меня есть событие нажатия клавиши, и я хочу, чтобы combobox обрабатывал нажатие клавиши, если вход не текстовый. И.Е. Если это клавиша «вверх» или «вниз», пусть combobox обрабатывает ее так, как обычно, но если это пунктуация или буквенно-цифровая, я хочу действовать на нее.Выполнение только ввода текста в событии KeyPress

Я думал, что Char.IsControl (e.KeyChar)) сделал бы трюк, но он не ловит клавиши со стрелками, а для combobox это важно.

ответ

2

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

// Boolean flag used to determine when a character other than a number is entered. 
private bool nonNumberEntered = false; 

// Handle the KeyDown event to determine the type of character entered into the control. 
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    // Initialize the flag to false. 
    nonNumberEntered = false; 

    // 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) 
     { 
      // Determine whether the keystroke is a backspace. 
      if(e.KeyCode != Keys.Back) 
      { 
       // A non-numerical keystroke was pressed. 
       // Set the flag to true and evaluate in KeyPress event. 
       nonNumberEntered = true; 
      } 
     } 
    } 
    //If shift key was pressed, it's not a number. 
    if (Control.ModifierKeys == Keys.Shift) { 
     nonNumberEntered = true; 
    } 
} 

// This event occurs after the KeyDown event and can be used to prevent 
// characters from entering the control. 
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    // Check for the flag being set in the KeyDown event. 
    if (nonNumberEntered == true) 
    { 
     // Stop the character from being entered into the control since it is non-numerical. 
     e.Handled = true; 
    } 
} 
+0

будет, что работа с международными символами, хотя? – Malfist

+0

@ Малфист: Это хороший вопрос, и я не знаю лично. Единственное, что я мог представить, что вы делаете для международных символов, - это выполнить еще одну проверку, которая позволила бы или запретить значения ASCII/Unicode, которые вас интересуют. – TheTXI

0

Вам не нужно, чтобы проверить нет текстовых символов.

Я надеюсь, что следующий код помогает:

void ComboBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if(Char.IsNumber(e.KeyChar)) 
     ... 
    else if(Char.IsLetter(e.KeyChar)) 
     ... 
}