Нехай необхідно заблокувати кнопку до правильного заповнення такої форми:
Після заповнення кнопка стає активною:
Суть обробки полягає в тому, що:
private void Form1_Load(object sender, EventArgs e)
{
button1.Enabled = false;
}
Тому, зробимо загальний обробник для всіх елементів форми, прив'яжемо його до подій, які виникають при зміні стану елемента. А саме:
| Елемент | Подія |
|---|---|
| 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;