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

Блокування командної кнопки до правильного заповнення форми

Нехай необхідно заблокувати кнопку до правильного заповнення такої форми:

Після заповнення кнопка стає активною:

Суть обробки полягає в тому, що:

  1. Після завантаження форми командна кнопка неактивна. Тобто, в обробнику події Load для форми встановити для цієї кнопки властивість Enabled рівну false

    private void Form1_Load(object sender, EventArgs e)
    {
        button1.Enabled = false;
    }
  2. Вона стає активною, якщо: Причому, при будь-якій зміні стану будь-якого елемента, активність або неактивність кнопки повинна змінюватися.

Тому, зробимо загальний обробник для всіх елементів форми, прив'яжемо його до подій, які виникають при зміні стану елемента. А саме:
ЕлементПодія
TextBox TextChanged
RadioButton CheckedChanged
CheckBox CheckedChanged
ComboBox SelectedIndexChanged

Наприклад, обробник textBox1_TextChanged прив'язаний до відповідних подій для всіх елементів нашої форми. А саме:

Для елементів TextBox:

Для елементів RadioButton:

Для елементів CheckBox:

Для елемента ComboBox:

У самому обробнику потрібно перевіряти стан всіх елементів форми:


private void TextBox1_TextChanged(object sender, EventArgs e)
{
    bool isFormValid = 
        textBox1.TextLength > 0 &&
        textBox2.TextLength > 0 &&
        (checkBox1.Checked || checkBox2.Checked) &&
        (radioButton1.Checked || radioButton2.Checked) &&
        !string.IsNullOrEmpty(comboBox1.Text);

    button1.Enabled = isFormValid;
}

Якщо заповнені обидва текстові поля і вибрано принаймні один прапорець і одна радіокнопка, і вибрано елемент списку або в цьому полі є введений текст, то робимо кнопку активною. В іншому випадку, якщо кнопка button1 активна, то робимо її неактивною.

Винесіть логіку перевірки в окремий метод:

private bool IsFormValid()
{
    return textBox1.TextLength > 0 &&
           textBox2.TextLength > 0 &&
           (checkBox1.Checked || checkBox2.Checked) &&
           (radioButton1.Checked || radioButton2.Checked) &&
           !string.IsNullOrEmpty(comboBox1.Text);
}

private void TextBox1_TextChanged(object sender, EventArgs e)
{
    button1.Enabled = IsFormValid();
}

Підпишіть цей обробник на всі відповідні події:

textBox1.TextChanged += TextBox1_TextChanged;
textBox2.TextChanged += TextBox1_TextChanged;
checkBox1.CheckedChanged += TextBox1_TextChanged;
checkBox2.CheckedChanged += TextBox1_TextChanged;
radioButton1.CheckedChanged += TextBox1_TextChanged;
radioButton2.CheckedChanged += TextBox1_TextChanged;
comboBox1.TextChanged += TextBox1_TextChanged;

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