Проблема заключается в том, что нажатие кнопки на элементе управления ToolStrip
или элемента на элементе управления MenuStrip
делает не причиной того, что события Validating
/ Validate
будут вызванывыбранный в данный момент элемент управления.Это по замыслу.Взаимодействие с меню и панелями инструментов не приводит к тому, что выбранный элемент управления теряет фокус, что означает, что проверка никогда не запускается.
Если вы тщательно обдумаете это, это даже имеет смысл.Представьте, что ваша логика проверки требует, чтобы каждая ячейка содержала значение (т. Е. Она не позволяла оставлять ячейки пустыми или пустыми).Если событие проверки запускалось каждый раз, когда пользователь пытался выбрать элемент из меню или панели инструментов, он не мог даже «вставить» что-либо в ячейку!
Вам нужно будет добавить нескольконекрасиво, дополнительная логика в вашей форме, если вы настаиваете на переопределении этого поведения, и вы рискуете серьезно раздражать вашего пользователя.Достаточно сказать, что я не рекомендую это.
Лучшее решение - извлечь вашу логику проверки в отдельный метод и вызвать ее вручную в начале метода обработчика событий для каждого элемента меню / панели инструментов.что вы хотите вызвать проверку.В качестве альтернативы вы можете вызвать событие LostFocus
для элемента управления DataGridView
в начале обработчика события нажатия кнопки «Сохранить» на панели инструментов, используя метод InvokeLostFocus
.Что-то вроде:
InvokeLostFocus(myDataGridView, EventArgs.Empty)