即使输入有效,错误提供程序也不会自行清除
Posted
技术标签:
【中文标题】即使输入有效,错误提供程序也不会自行清除【英文标题】:Error Provider is not clearing itself even if the inputs are valid 【发布时间】:2021-08-23 18:24:24 【问题描述】:我正在使用 Windows 窗体和错误提供程序来验证我的文本框,验证按预期工作,但即使输入与验证匹配,错误提供程序也不会自行清除。
这里有一些关于这个问题的截图。
这是我的代码,请告诉我如何修复它。
private void usernamet_Validating(object sender, CancelEventArgs e)
int username = usernamet.Text.Length;
ErrorProvider errorProvider = new ErrorProvider();
if (string.IsNullOrEmpty(usernamet.Text))
e.Cancel = true;
usernamet.Focus();
errorProvider.SetError(usernamet, "Username cannot be empty");
else if (username < 5 || username >= 20 )
e.Cancel = true;
usernamet.Focus();
errorProvider.SetError(usernamet, "Username must have more than 5 characters and less than 20 characters.");
else if (!Regex.IsMatch(usernamet.Text, @"^[a-zA-Z0-9@.]*$"))
e.Cancel = true;
usernamet.Focus();
errorProvider.SetError(usernamet, "Username cannot contain special characters.");
else
e.Cancel = false;
errorProvider.Clear();
errorProvider.SetError(usernamet, null);
【问题讨论】:
不要这样做:ErrorProvider errorProvider = new ErrorProvider();
。在设计器中,从 ToolBox 中删除一个 ErrorProvider 实例并在您的代码中使用它。在Validating
事件中,使用.SetError
方法设置或清除该控件的错误。
【参考方案1】:
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.errorprovider.clear?view=netframework-4.7.2
调用此方法会清除此 ErrorProvider 的所有属性设置,将属性恢复为其默认值。要清除错误消息,请调用 SetError 方法并为 String 值传入 Empty。这会从指定的 Control 中删除错误字形。
【讨论】:
else e.Cancel = false; errorProvider.Clear(); errorProvider.SetError(usernamet, null);我确实将 null 值传递给了 SetError 方法,但它没有按预期工作。 看看这个示例,你不应该传递 null 来设置错误,你应该传递 "" 给它。 c-sharpcorner.com/article/… else e.Cancel = false; errorProvider.Clear(); errorProvider.SetError(usernamet, "");我传入了空字符串并进行了测试,但是 ErrorProvider 图标仍然没有自行清除,问题出在 Visual Studio 而不是代码上? 使用此代码。 usernamet.setErrorEnabled(false); 它也不起作用,我会尝试弄清楚。感谢您的帮助以上是关于即使输入有效,错误提供程序也不会自行清除的主要内容,如果未能解决你的问题,请参考以下文章
使用 EclipseLink 的 H2 数据库出现问题(即使没有错误,程序也不会更改数据库)