У меня будет переменная уровня формы (назовите ее _ vetoClosing
). В событии Click кнопки accept я бы запустил проверку и установил переменную на основе этого:
private void acceptButton_Click(object sender, EventArgs e)
{
// Am I valid
_vetoClosing = !isValid();
}
Тогда в событии FormClosing я бы отменил закрытие, если _vetoClosing имеет значение true
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
// Am I allowed to close
if (_vetoClosing)
{
_vetoClosing = false;
e.Cancel = true;
}
}
Отключение кнопки «Принять» является неоптимальным, поскольку вы теряете функциональность Enter to Press.