Вчера я сделал собственное текстовое поле с собственным валидатором:
public partial class CustomTextBox : TextBox
{
ErrorProvider errorProvider;
public CustomTextBox()
{
InitializeComponent();
errorProvider = new ErrorProvider();
errorProvider.DataSource = this;
}
protected override void OnValidating(CancelEventArgs e)
{
base.OnValidating(e);
if (this.Text.Trim() == "")
{
errorProvider.SetError(this, "Required field");
e.Cancel = true;
return;
}
errorProvider.SetError(this, "");
}
}
Поэтому я поместил это в форму с кнопкой отмены и установил для причины проверки значение false на кнопке отмены. Я также устанавливаю для формы значение false. По какой-то причине, если я нажму кнопку "Отмена", мое пользовательское текстовое поле все еще запускает событие onValidating. Любые идеи, что вызывает это? Я бы не хотел, чтобы что-либо проверяло мои текстовые поля, пока я не нажму кнопку отправки, которая попытается проверить все элементы управления в форме. Таким образом, пользователю не нужно вводить данные в элемент управления, прежде чем перейти к другому. Звучит разумно? Это мой первый взлом пользовательского интерфейса winforms.