我有一个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();
}
}
}
}
答案 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, "");
}
}
}