У меня есть текстовое поле, стандартная кнопка и панель инструментов, содержащая пару кнопок.
В проверяющем событии текстового поля я закодирован, чтобы проверить, является ли он пустым.
Если да, то отображается сообщение "Введите значение". При нажатии стандартной кнопки во время
текстовое поле пуст, оно правильно проверяет и показывает сообщение, но когда
Нажмите кнопку toolstripbutton, чтобы не проверять текстовое поле, и сообщение не отображается. Кажется, что я должен написать код проверки явно в
toolstripbutton_click
событие, которое является слишком сложным, когда в одной форме есть несколько текстовых полей и кнопок toolstrip.
Что я хочу знать, можно ли запустить textbox_validating
при нажатии кнопки toolstripbutton? Обработка инструментальных панелей действительно является головной болью.
Запишите следующее в событии clickstripbutton:
Me.Validate()
Классы ToolStripItem являются особыми, они не выводятся из Control. Один из побочных эффектов заключается в том, что они не отводят фокус от активного контроля. И это предотвращает запуск события Validating.
Несколько вещей, которые вы можете сделать. Вы можете вызвать метод родительского метода ValidateChildren(). Или вы можете сами переместить фокус:
private void toolStripButton1_Click(object sender, EventArgs e) {
btnSave.Focus();
if (btnSave.Focused) btnSave.PerformClick();
}
Вы можете вызвать процедуру textbox_validating из процедуры, которая обрабатывает событие clickstripbutton, но вам, возможно, придется добавить некоторую логику, чтобы проверить, прошла ли она проверку, прежде чем приступать к остальному событию toolstripbutton_click. Поскольку вы сказали, что у вас много текстовых полей для проверки, вы можете захотеть создать функцию Validate(), которая вернет true или false и проверит все текстовые поля. Затем все, что вам нужно сделать, это проверить, проверено ли Validate() = true и вызывать одну и ту же функцию со всех ваших кнопок панели инструментов, а не копировать один и тот же код снова и снова.