Инструментальная кнопка не проверяет текстовое поле

2

У меня есть текстовое поле, стандартная кнопка и панель инструментов, содержащая пару кнопок. В проверяющем событии текстового поля я закодирован, чтобы проверить, является ли он пустым. Если да, то отображается сообщение "Введите значение". При нажатии стандартной кнопки во время текстовое поле пуст, оно правильно проверяет и показывает сообщение, но когда Нажмите кнопку toolstripbutton, чтобы не проверять текстовое поле, и сообщение не отображается. Кажется, что я должен написать код проверки явно в toolstripbutton_click событие, которое является слишком сложным, когда в одной форме есть несколько текстовых полей и кнопок toolstrip.

Что я хочу знать, можно ли запустить textbox_validating при нажатии кнопки toolstripbutton? Обработка инструментальных панелей действительно является головной болью.

Теги:
visual-studio-2008

3 ответа

3
Лучший ответ

Запишите следующее в событии clickstripbutton:

Me.Validate()
  • 0
    Как бы это ни отвечало на вопрос, оно не дает объяснения, почему в этом случае следует отклоняться от совершенно обычной стандартной модели. Ответ Ганса намного лучше.
1

Классы ToolStripItem являются особыми, они не выводятся из Control. Один из побочных эффектов заключается в том, что они не отводят фокус от активного контроля. И это предотвращает запуск события Validating.

Несколько вещей, которые вы можете сделать. Вы можете вызвать метод родительского метода ValidateChildren(). Или вы можете сами переместить фокус:

    private void toolStripButton1_Click(object sender, EventArgs e) {
        btnSave.Focus();
        if (btnSave.Focused) btnSave.PerformClick();
    }
0

Вы можете вызвать процедуру textbox_validating из процедуры, которая обрабатывает событие clickstripbutton, но вам, возможно, придется добавить некоторую логику, чтобы проверить, прошла ли она проверку, прежде чем приступать к остальному событию toolstripbutton_click. Поскольку вы сказали, что у вас много текстовых полей для проверки, вы можете захотеть создать функцию Validate(), которая вернет true или false и проверит все текстовые поля. Затем все, что вам нужно сделать, это проверить, проверено ли Validate() = true и вызывать одну и ту же функцию со всех ваших кнопок панели инструментов, а не копировать один и тот же код снова и снова.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню