Как разрешить только цифры внутри текстового поля в Winforms C #

Чтобы создать элемент ввода в форме Windows, который принимает только цифры, у вас есть 2 варианта:

А. Используйте элемент управления NumericUpDown

Если вы хотите создать ввод, который принимает только число, первое, о чем вам нужно подумать, это элемент управления NumericUpDown. Этот элемент управления представляет собой окно прокрутки Windows (также называемое элементом управления «вверх-вниз»), в котором отображаются исключительно числовые значения.

Вы можете просто перетащить этот элемент управления из панели инструментов в компоненты «Все формы Windows»:

NumericUpDown Control Winforms

Или вы можете добавить его динамически, используя код:

// Create a new numericupdown control
NumericUpDown numbox = new NumericUpDown();
// Some location on the form
numbox.Location = new Point(10, 50);
numbox.Visible = true;
// Append to the form
Controls.Add(numbox);

Чтобы получить его значение, вы можете просто получить доступ к атрибуту Value элемента управления, например:

// Retrieve numeric up down value
decimal value = numericUpDown1.Value;
// Show in an alert
MessageBox.Show(value.ToString()); 

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

B. с реальным текстовым полем

Если вы не можете использовать NumericUpDown по какой-то причине, например, при использовании инфраструктуры пользовательского интерфейса, которая предлагает только текстовое поле, вы все равно можете фильтровать ввод, обрабатывая его правильно KeyPress событие. Первое, что вам нужно сделать, это добавить функцию к событию KeyPress вашего ввода, автоматически добавив событие с Visual Studio, выбрав ваше текстовое поле и в панели инструментов Свойства (в правом нижнем углу VS), затем выбрав вкладку событий и дважды щелкнув опция KeyPress:

Дважды щелкните KeyPress Event Textbox

Это автоматически добавит функцию KeyPress в ваш класс, который будет пустым, затем вам нужно изменить его следующим кодом, чтобы предотвратить ввод нечисловых символов:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// Verify that the pressed key isn't CTRL or any non-numeric digit
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
{
e.Handled = true;
}
// If you want, you can allow decimal (float) numbers
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
}

Чтобы получить его значение, вам нужно только преобразовать строку в число, используя нужный тип:

string textboxValue = textBox1.Text;
// Retrieve as decimal
decimal valueDec = decimal.Parse(textboxValue);
// Retrieve as integer
int valueInt = Int32.Parse(textboxValue);
Ссылка на основную публикацию
Adblock
detector