Назад Вперед Зміст

Обмеження введення неприпустимих символів в TextBox

Для цього будемо використовувати обробник події 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

Призначення коду

Цей код є обробником події KeyPress для текстового поля (TextBox) у Windows Forms. Він обмежує введення лише цифровими символами.

Детальний опис

Параметри методу:

Кроки виконання:

  1. Отримання символу натиснутої клавіші з e.KeyChar
  2. Перевірка чи символ є цифрою за допомогою char.IsDigit()
  3. Якщо символ не цифра:

Приклад використання

Цей обробник корисний для:

Розширені можливості

// Дозвіл backspace і десяткової крапки
if (!char.IsDigit(enteredChar) && enteredChar != '\b' && enteredChar != '.')
{
    e.Handled = true;
}

Ця модифікація дозволяє:

Важливі зауваження

Обмеження при введенні дійсного числа

Обробник події 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 дозволяє вводити у текстове поле:

Детальний опис логіки

Умови введення символів:

Приклади коректного вводу

Приклади заблокованого вводу

Покращений варіант коду

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;
}

Покращення включають:

Назад Вперед Зміст