Используйте событие Validating в C#

Когда фокус перемещается от одного элемента управления к другому, первый может запустить событие Validating. Это происходит только в том случае, если свойство CausesValidation второго элемента управления true.

Программа может установить параметр Validating обработчика события e.Cancel в true, чтобы предотвратить фокус от выхода из первого элемента управления. В этом случае вы также должны как-то сообщить пользователю, что есть проблема с полем. Например, вы можете отобразить сообщение об ошибке, изменить цвет фона поля или, по крайней мере, дать звуковой сигнал, чтобы пользователь знал, что фокус не покидал поле, потому что что-то не так.

В этом примере используется несколько вспомогательных методов. Метод CamelCaseToWords, показанный в следующем коде, преобразует строку в формате для верблюда likeThisOne в серию разделенных пробелами слов, удаляя первую часть, чтобы дать «This One».

// Разделим строку в camelCase, удалив префикс.
private string CamelCaseToWords(string input)
{
    // Вставьте пробел перед каждой заглавной буквой.
    string result = "";
    foreach (char ch in input.ToCharArray())
    {
        if (char.IsUpper(ch)) result += " ";
        result += ch;
    }

    // Найдите первое пространство и удалим все перед ним.
    return result.Substring(result.IndexOf(" ") + 1);
}

Метод RequiredFieldIsBlank, показанный в следующем коде, определяет, является ли обязательное поле пустым. Если он пуст, метод задает ошибку в поле с помощью ErrorProvider. В противном случае он очищает сообщение об ошибке объекта ErrorProvider.

// Проверять обязательное поле. Верно true, если поле действительно.
private bool RequiredFieldIsBlank(ErrorProvider err, TextBox txt)
{
    if (txt.Text.Length > 0)
    {
        // Очистите ошибку.
        err.SetError(txt, "");
        return false;
    }
    else
    {
        // Установите ошибку.
        err.SetError(txt, CamelCaseToWords(txt.Name) +
            " must not be blank.");
        return true;
    }
}

Все текстовые поля программы, кроме текстового поля почтового индекса, имеют следующий обработчик событий Validating.

// Проверять поля.
private void txtRequiredField_Validating(object sender,
    CancelEventArgs e)
{
    TextBox txt = sender as TextBox;
    e.Cancel = RequiredFieldIsBlank(errField, txt);
}

Этот код вызывает метод RequiredFieldIsBlank, чтобы установить или очистить сообщение об ошибке TextBox. Он устанавливает e.Cancel результат, возвращенный этим методом, поэтому фокус не может оставить TextBox, если есть ошибка.

Наконец, в текстовом поле почтового индекса используется следующий Validating обработчик событий. Это немного сложнее, потому что он проверяет формат поля.

// Проверяем почтовый индекс.
private void txtZip_Validating(object sender, CancelEventArgs e)
{
    // Проверьте отсутствие значения.
    if (RequiredFieldIsBlank(errField, txtZip))
    {
        e.Cancel = true;
        return;
    }

    // Проверяем правильный формат.
    Regex regex = new Regex(@"^(\d{5}|\d{5}-\d{4})$");
    if (regex.IsMatch(txtZip.Text))
    {
        // Очистите ошибку.
        errField.SetError(txtZip, "");
    }
    else
    {
        // Установите ошибку.
        errField.SetError(txtZip,
            "ZIP code must have format ##### or #####-####.");
        e.Cancel = true;
    }
}

Этот код вызывает метод RequiredFieldIsBlank, чтобы убедиться, что пользователь ввел значение. Затем он использует регулярное выражение, чтобы убедиться, что введенный текст имеет формат ##### или ##### - ####. (Вы можете изменить это, чтобы оно соответствовало вашей системе почтовых индексов, если вы не находитесь в U.S.)

Итак, вот последовательность событий. Когда пользователь пытается выйти из TextBox, срабатывает его Validating evnet. Обработчик событий проверяет, содержит ли текст TextBox допустимый текст, а если нет, то устанавливает e.Cancel = true, чтобы предотвратить удаление фокуса из TextBox .

Обратите внимание, что событие Validating происходит независимо от того, как пользователь пытается покинуть TextBox. Например, если пользователь нажимает клавишу Tab, нажимает на другой элемент управления, нажимает Enter, чтобы вызвать кнопку «Принять», или нажимает Esc, чтобы вызвать кнопку «Отмена». Событие запускается, даже если пользователь пытается закрыть форму. Это означает, что пользователь не может закрыть форму, если поле не проходит проверку.

Источник: http://csharphelper.com/blog/2016/02/use-the-validating-event-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector