【问题标题】: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 方法设置或清除该控件的错误。

标签: c# windows winforms validation errorprovider


【解决方案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);
  • 它也不起作用,我会尝试弄清楚。感谢您的帮助
猜你喜欢
  • 2021-05-12
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2020-08-04
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多