Проверка текстового поля, проблема переключения фокуса

Доброе утро,

Я работаю над приложением winform C#, которое использует проверку элементов управления. Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь щелкает текстовое поле и пытается щелкнуть, проверка срабатывает и перенаправляет элемент управления, в основном пользователь не может перейти из элемента управления в другой элемент управления.

Мой желаемый результат - чтобы ВСЕ элементы управления в форме проверялись, когда пользователь нажимает кнопку отправки. Я хотел бы, чтобы значок errorProvider появлялся рядом с полями, в которых есть ошибка, и позволял пользователю исправлять их по своему усмотрению.

Мой вопрос в том, как мне настроить элемент управления, чтобы пользователь мог щелкать за его пределами при возникновении ошибки. Я бы хотел, чтобы у пользователя была возможность заполнить оставшуюся часть формы и вернуться к ошибке самостоятельно, а не заставлять ее немедленно устранять.

Заранее благодарим вас за любую помощь и совет,

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
7 835
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Самый простой способ - просто поместить всю проверку в обработчик кнопки «Отправить», а не в элементы управления.

Есть свойство (я думаю, оно есть в форме), которое позволяет вам перемещаться между полями, когда проверка не выполняется. Я не могу вспомнить, как это называется, но я думаю, что это название довольно информативное.

Есть свойство CausesValidation, которое, я полагаю, вы установили для целевого элемента управления, но вам нужно установить его в false для все. Проще просто избежать всего механизма, ИМО.

Jon Skeet 19.11.2008 18:46

Может быть, это так - честно говоря, мы обычно сами проверяем нажатия кнопок ...

kͩeͣmͮpͥ ͩ 19.11.2008 18:51

у нас есть функция проверки, которая возвращает bool, если форма действительна, и устанавливает всех поставщиков ошибок в форме:

выглядит так:

    private void OnSave()
    {
      if (ValidateData())
      {
        //do save
      }
    }

    public bool ValidateData()
    {
        errorProvider.Clear();
        bool valid = true;
        if (this.defectStatusComboBox.SelectedIndex == -1)
        {
            errorProvider.SetError(defectStatusComboBox, "This is a required feild.");
            valid = false;
        }
        //etc...
        return valid;
     }

Форма имеет свойство AutoValidate, которое можно настроить, чтобы разрешить изменение фокуса.

Вы, сэр, ученый и джентльмен. Мне даже в голову не пришло проверить свойства уровня формы, так как я думал, что это будет либо поставщик ошибок, либо проверяемый элемент управления.

Colton 04.12.2012 00:39

Свойство формы - «AutoValidate», и оно влияет на все элементы управления в форме. Это перечисление; установите для него значение System.Windows.Forms.AutoValidate.EnableAllowFocusChange, чтобы позволить пользователю выйти из элемента управления, который не прошел проверку, но по-прежнему отображать значок ошибки, который позволяет пользователю отображать всплывающую подсказку.

Свойство элемента управления CausesValidation является логическим. Если это правда, то элемент управления вызывает событие проверки, которое запускает errorProvider. Это неверно, все пропускается, пользователь может выйти из управления, но нет значка ошибки или всплывающей подсказки.

Другие вопросы по теме