Проблема с ErrorProvider.Clear () - PullRequest
       2

Проблема с ErrorProvider.Clear ()

5 голосов
/ 05 октября 2010

У меня есть одна проблема.Я проверяю два текстовых поля.Если texbox не проверен, я показываю сообщение об ошибке с поставщиком ошибок.

Ситуация:

tbAzetId.Text = "string";tbHeslo.Text = empty;

errorprovider показывает сообщение об ошибке в tbHeslo, это нормально.

Затем я пишу некоторый текст в tbHeslo, нажимаю кнопку, но errorprovider все еще показывает сообщение об ошибке в tbHeslo.Где может быть проблема?

Код здесь:

    private bool IsAzetIdValid()
    {
        if (tbAzetId.Text!=String.Empty && Regex.IsMatch(tbAzetId.Text, "[^a-zA-Z0-9]"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private bool IsHesloValid()
    {
        if (tbHeslo.Text !=String.Empty)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private void btnPrihlasenie_Click(object sender, EventArgs e)
    {
        errorProvider.Clear();

        if (!IsAzetIdValid())
            errorProvider.SetError(tbAzetId, @"Nezadali ste Azet ID");
        else if (!IsHesloValid())
            errorProvider.SetError(tbHeslo, @"Nezadali ste heslo");
        else
            Text = "OK";
    }

Ответы [ 8 ]

12 голосов
/ 05 октября 2010

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

errorProvider.SetError(tbAzetId, "");
if (!IsAzetIdValid())
    errorProvider.SetError(tbAzetId, @"Nezadali ste Azet ID");

errorProvider.SetError(tbHelso, "");
if (!IsHesloValid())
    errorProvider.SetError(tbHeslo, @"Nezadali ste heslo");;

ErrorProvider.Clear недостаточно:

Чтобы удалить сообщение об ошибке, вызовите метод SetError и передайте значение Empty для значения String.

3 голосов
/ 04 января 2013

По моему опыту оба

errorProvider.SetError(<ctrlName>, "");

и

errorProvider.Clear();

удалит значок из формы. Будьте внимательны к тому, что ErrorProvider экземпляр вы очищаете. Пример ниже работает. Однако, если вы переместите объявление ErrorProvider в Validating Event, оно скомпилирует, создаст ошибку, но не очистит ее.

ErrorProvider ep = new ErrorProvider();
private void txtBox_Validating(object sender, CancelEventArgs e)
{
    bool bValidated = double.TryParse(txtBox.Text, out txtBoxVar);
    if (bValidated)
    {
        ep.SetError(txtBox, String.Empty);
        ep.Clear();
    }
    else
    {
        ep.SetError(txtBox, "Enter a valid decimal.");
    }
}
3 голосов
/ 05 октября 2010

Используйте errorProvider.SetError (ctlName, ""), чтобы удалить сообщение об ошибке из элемента управления.

2 голосов
/ 08 апреля 2019

ErrorProvider.Clear сбросит все ваши настройки с ErrorProvider, такие как выравнивание, заполнение, источник данных и т. Д., В то время как если вы просто хотите удалить его из элемента управления (после его правильной проверки), используйте SetError(Control, ""). Для вашего кода это будет:

private void btnPrihlasenie_Click(object sender, EventArgs e)
{
    if (IsAzetIdValid()) {
        errorProvider.SetError(tbAzetId, "");
    } else {
        errorProvider.SetError(tbAzetId, @"Nezadali ste Azet ID");
    }
}
1 голос
/ 20 июня 2015

Использование нескольких объектов ErrorProvider приведет к такому поведению. Моим решением было просто использовать один ErrorProvider.

1 голос
/ 23 мая 2015

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

Я видел такие идеи, как перебирать каждый элемент управления и устанавливать пустое сообщение ..

foreach (Control cr in this.Parent.Controls)
{
  errorProvider1.SetError(cr, "");
}

Но для меня то, что на самом деле работалоотлично, было просто

errorProvider1.Dispose();
0 голосов
/ 21 августа 2017

Вот мое решение для проверки пустых элементов управления

1- Добавьте новый класс в ваш проект и создайте следующий метод, как показано ниже:

public class ValidationHelper
{
    private static ErrorProvider errProvider = new ErrorProvider();
    public static void ValidateFields(List<Control> controls)
    {
        errProvider.Clear();
        foreach (Control c in controls)
        {
            errProvider.SetError(c, "");
            if (string.IsNullOrWhiteSpace(c.Text))
            {
                errProvider.SetError(c, "Please fill the required field");
            }
        }
    }

}

2- и вот как использовать мой класс выше

    private void cmdSave_Click(object sender, EventArgs e)
    {
        try
        {
            List<Control> controls = new List<Control>();
            controls.Add(this.txtQty);
            controls.Add(this.txtComment);

            ValidationHelper.ValidateFields(controls);
            //rest of your code

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

Примечание: нам нужно определить / использовать один errorProvider. Спасибо

0 голосов
/ 08 июня 2012

errorProvider.SetError(<ctrlName>, "") просто устанавливает сообщение об ошибке в пустую строку.Чтобы полностью избавиться от индикатора ошибки, необходимо позвонить errorProvider.Clear();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...