调用ErrorProvider.Dispose不会每次都清除错误文本

时间:2012-07-24 14:11:04

标签: c# winforms

我有一个Windows窗体应用程序,并且正在调用ErrorProvider.Dispose来清除错误文本。但是,当我第二次调用它时它不起作用(即如果文本框为空,ErrorProvider将显示,但在我填充文本框并再次按下提交按钮后,它将不会显示错误)。

我有一个包含许多文本框的表单,我只是在单击提交按钮后检查字段是否为空:

foreach (Control c in this.college.Controls)
{
    if (c is TextBox)
    {
        TextBox textBox = c as TextBox;
        if (textBox.Text.Equals(string.Empty))
        {
            if (string.IsNullOrWhiteSpace(textBox.Text))
            {
                errorProvider1.SetError(textBox, "Field Empty");
            }
            else
            {
                errorProvider1.Dispose();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

如果您的目的只是清除先前的错误消息,那么只需再次调用SetError方法,但传入一个空字符串。

if (string.IsNullOrWhiteSpace(textBox.Text)) 
{ 
    errorProvider1.SetError(textBox, "Field Empty"); 
} 
else 
{ 
    errorProvider1.SetError(textBox, string.Empty); 
} 

无需调用Dispose()。相反,调用Dispose会破坏errorprovider,并且在表单的剩余生命周期内它将无法使用。

答案 1 :(得分:0)

我认为您的代码永远不会与

一致
errorProvider1.Dispose()

自if语句

if (textBox.Text.Equals(string.Empty))

制作第二个if语句

if (string.IsNullOrWhiteSpace(textBox.Text))

无用。

如果textBox.Text为空,那么它也是null-or-whitespace。

答案 2 :(得分:0)

您不希望在错误提供程序上调用.Dispose() - 这将由垃圾收集器自动收集。您的代码可能如下所示:

   foreach (Control c in this.college.Controls)
    {

        if (c is TextBox)
        {

            TextBox textBox = c as TextBox;


             if (string.IsNullOrWhiteSpace(textBox.Text))
             {
                errorProvider1.SetError(textBox, "Field Empty");
             }
             else
             {
                errorProvider1.SetError(textBox, "");
             }
        }
    }