Проверка текстового поля, проблема переключения фокуса - PullRequest
6 голосов
/ 19 ноября 2008

Доброе утро,

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

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

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

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

Ответы [ 5 ]

27 голосов
/ 30 января 2009

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

6 голосов
/ 23 октября 2009

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

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

2 голосов
/ 19 ноября 2008

у нас есть функция проверки, которая возвращает 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;
     }
2 голосов
/ 19 ноября 2008

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

0 голосов
/ 19 ноября 2008

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

...