2015-02-16 4 views
1

У меня есть текстовое поле с событием OnKeyPress. В этом текстовом поле я хочу ввести только числа, а для некоторых конкретных букв, таких как t или m, я хотел бы выполнить код без ввода этой буквы в текстовое поле. Небольшой пример того, что я пытаюсь сделать:C# - Как я могу заблокировать ввод буквы на нажатие клавиши?

//OnKeyPressed: 
void TextBox1KeyDown(object sender, KeyEventArgs e) 
    { 
     if(e.KeyCode == Keys.T || e.KeyCode == Keys.M) Button1Click(this, EventArgs.Empty); 
    } 

К сожалению, это не мешает ввод письма ..

+2

Что означает 'Button1Click'? вам нужно использовать 'e.Handled = true;' здесь !! –

+1

Вы в форме Win или WPF? – Gun

+0

@Gun Использование Winform – Vantalk

ответ

4

Установите свойство SuppressKeyPress от KeyEventArgs истинно, как показано ниже:

private void TextBox1KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.T || e.KeyCode == Keys.M) 
    { 
     e.SuppressKeyPress = true; 
     Button1Click(this, EventArgs.Empty); 
    } 
} 
1

Вы всегда можете запустить TryParse в событии keyDown, чтобы проверить, как данные вводятся. Это избавляет пользователя от дополнительного взаимодействия с пользовательским интерфейсом.

private void TextBox1KeyDown(object sender, KeyEventArgs e) 
    { 
     int i; 

     string s = string.Empty; 

     s += (char)e.KeyValue; 

     if (!(int.TryParse(s, out i))) 
     { 
      e.SuppressKeyPress = true; 
     } 
     else if(e.KeyCode == Keys.T || e.KeyCode == Keys.M) 
     { 
      e.SuppressKeyPress = true; 
      Button1Click(this, EventArgs.Empty); 
     }    
    } 
+0

Очень полезно при проверке номера. Raluca предоставил первый ответ на SuppressKey, чтобы он остался моим ответом – Vantalk