2015-04-30 6 views
0

Я использую WinForms, и я изо всех сил пытаюсь сделать все TextBoxes с GroupBox, чтобы принимать только цифры в качестве пользовательского ввода. Есть ли способ поднять событие KeyPress для всех TextBoxes в GroupBox? Что-то вроде этого может быть:C# Только текстовые текстовые поля в текстовом поле в GroupBox.

private void groupBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) 
     { 
      e.Handled = true; 
     } 
} 

Я совершенно новый, поэтому, пожалуйста, несите меня. Любая помощь будет принята с благодарностью.

+1

Рассмотрим с помощью элемента управления NumericUpDown вместо TextBox. Он автоматически обрабатывает числовую фильтрацию, а также дает пользователю более интуитивно понятный интерфейс. Но если вы хотите использовать TextBox, чистый объектно-ориентированный способ сделать это - подклассировать встроенный элемент управления TextBox, добавить числовую логику фильтрации, а затем использовать свой подклассовый элемент управления вместо стандартного элемента управления TextBox везде, где это необходимо , –

+0

то, что предлагает @CodyGray, является хорошим и чистым вариантом, но вы можете использовать пустоту, которую вы разместили здесь для каждого текстового поля, привязывая все события нажатия клавиш к той же самой пустоте. – maam27

ответ

0

Вы можете попробовать этот код:

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && 
     (e.KeyChar != '.')) 
    { 
      e.Handled = true; 
    } 

    // only allow one decimal point 
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
    { 
     e.Handled = true; 
    } 
} 

Источник ответа здесь How do I make a textbox that only accepts numbers?

+0

Я уже пробовал. Похоже, что если GroupBoxes вообще не имеет события KeyPress, хотя MSDN заявляет, что они это делают. –

+0

Вы можете установить событие KeyPress для всего элемента управления TextBox для этой группыBox1_KeyPress, вместо того, чтобы устанавливать событие управления групповым ящиком. Например: textBox1.KeyPress + = groupBox1_KeyPress, textBox2.KeyPress + = groupBox1_KeyPress ... –

+0

Большое спасибо! Это не только работало, но и помогло мне понять обработчики событий немного лучше :) –

Смежные вопросы