#c# #winforms #datagridview #validating
#c# #winforms #datagridview #проверка
Вопрос:
Я переопределяю событие OnValidating в пользовательском текстовом поле Winforms. Я обнаружил, что если текстовое поле (которое привязано к объекту) имеет фокус, а затем я указываю фокус сетки с помощью мыши, событие OnValidating не всегда запускается. Когда я сначала указываю фокус сетки, он запускается нормально. Но, если поместить одну из ячеек сетки в поле редактирования (мигающий курсор), оттуда, похоже, она не запускается, когда я возвращаюсь между текстовым полем и сеткой с помощью мыши. Если я меняю фокус с помощью клавиши tab, проверка всегда запускается. Если я фокусируюсь на элементе управления, отличном от сетки, с помощью мыши, проверка всегда запускается.
Я попытался воссоздать эту функциональность с нуля в простой форме, и я не могу воссоздать проблему. Сетка, которую я использую в настройке, где я получаю проблему, представляет собой настраиваемый DataGridView с настраиваемыми типами столбцов. Мне интересно, проблема ли в сетке. Но я не понимаю, как это может повлиять на события текстового поля. Есть идеи?
Комментарии:
1. фрагмент кода будет высоко оценен…
Ответ №1:
Вероятно, это связано со CausesValidation
свойством.
Проверка элемента управления подавляется, если фокус переходит к элементу управления, для которого CausesValidation
установлено значение false. Это просто дикое предположение, но я думаю, что некоторый контроль внутри сетки имеет CausesValidation = false;
Это свойство предназначено для таких вещей, как кнопки «Отмена», но может вызвать много путаницы.
Комментарии:
1. Хорошо, я упростил свою сетку, удалив все, кроме одного столбца, который использует DataGridViewTextBoxEditingControl . Я также упростил его, чтобы иметь только одну строку / ячейку. Я проверил, что для элемента управления редактированием для этого столбца установлено значение CausesValidation true. Есть ли что-нибудь, чего мне не хватает?