即使输入有效,错误提供程序也不会自行清除

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); 它也不起作用,我会尝试弄清楚。感谢您的帮助

以上是关于即使输入有效,错误提供程序也不会自行清除的主要内容,如果未能解决你的问题,请参考以下文章

即使输入数据错误,SSIS 包也不会失败

使用 EclipseLink 的 H2 数据库出现问题(即使没有错误,程序也不会更改数据库)

即使没有任何错误,我的 discord.js 机器人也不会回复用户消息 [重复]

即使地图显示没有任何错误,onMapReady 也不会调用

Jquery 验证不适用于 datepicker 的输入

Xamarin 不会部署到 Android 模拟器没有错误