Для цього будемо використовувати обробник події KeyPress.
Подія KeyPress виникає, коли користувач натискає і відпускає символьну клавішу в текстовому полі (textBox) або полі зі списком (comboBox).
Стандартний обробник цієї події виконує такі дії:
Можна відмінити дії стандартного обробника події KeyPress і написати свій обробник цієї події.
Для цього будемо використовувати властивість Handled, яка повертає або задає значення, що показує, чи була оброблена подія KeyPress.
Значення властивості Handled дорівнює true, якщо ми хочемо самостійно обробити подію KeyPress, і дорівнює false, якщо буде використано стандартний обробник.
Ці обробники можуть бути підключені для всіх полів, в які ми хочемо обмежити введення.
Нехай обробник події KeyPress має бути підключений для елемента textBox1.
І для елемента textBox2,
І для елемента textBox3:
І для всіх інших текстових полів, якщо в них потрібно вводити лише цілі або дійсні числа.
Розглянемо два обробники події KeyPress: для вводу цілого числа і для вводу дійсного числа.
Введення натурального числа передбачає введення лише цифр.
Для того, щоб не допустити введення в текстові поля textBox нічого, крім цифр, потрібно використовувати для них обробник події KeyPress.
У цьому обробнику ми скасовуємо дію стандартного обробника події (e.Handled=true), якщо була натиснута клавіша з не цифрою (!Char.IsDigit(c)).
Таким чином, не цифри не будуть виводитися в текстові поля textBox.
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// Отримуємо символ, який був натиснутий
char enteredChar = e.KeyChar;
// Перевіряємо, чи є символ цифрою
if (!char.IsDigit(enteredChar))
{
// Якщо символ не цифра - скасовуємо подію
e.Handled = true;
}
}
Цей код є обробником події KeyPress для текстового поля (TextBox) у Windows Forms. Він обмежує введення лише цифровими символами.
Параметри методу:
object sender - елемент керування, який викликав подіюKeyPressEventArgs e - містить інформацію про натиснуту клавішуe.KeyCharchar.IsDigit()e.Handled = trueЦей обробник корисний для:
// Дозвіл backspace і десяткової крапки
if (!char.IsDigit(enteredChar) && enteredChar != '\b' && enteredChar != '.')
{
e.Handled = true;
}
Ця модифікація дозволяє:
'\b')Обробник події KeyPress при введенні дійсного числа
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char c = e.KeyChar; // Нажатий символ
TextBox pole = sender as TextBox;
string tx = pole.Text; // Вміст текстового поля
int dl = tx.Length; // Кількість символів у полі
int n = tx.IndexOf(","); // Чи міститься кома
if (!(char.IsDigit(c) || // Цифра
(c == ',' && n == -1 && dl != 0) || // Одна кома не на початку
(c == '-' && dl == 0) || // Мінус тільки на початку
(c == '+' && dl == 0))) // Плюс тільки на початку
{
e.Handled = true; // Блокувати символ
}
}
Цей обробник події KeyPress дозволяє вводити у текстове поле:
n == -1)dl != 0)dl == 0)private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char enteredChar = e.KeyChar;
TextBox textBox = (TextBox)sender;
string currentText = textBox.Text;
int length = currentText.Length;
bool hasComma = currentText.Contains(",");
bool hasSelection = textBox.SelectionLength > 0;
// Дозволені символи
bool isAllowed = char.IsDigit(enteredChar) ||
(enteredChar == ',' && !hasComma && length > 0 && !currentText.Contains(",")) ||
((enteredChar == '-' || enteredChar == '+') && length == 0) ||
(enteredChar == '\b'); // Backspace
// Дозволити Ctrl+V для чисельних значень
if (Control.ModifierKeys == Keys.Control && enteredChar == '\x16')
{
return;
}
e.Handled = !isAllowed;
}
Покращення включають: