【问题标题】:ErrorProvider using classErrorProvider 使用类
【发布时间】:2011-10-29 12:08:38
【问题描述】:

为了避免重复 if else 代码,我做了以下课程,一次又一次:

public class Error 
{

    private ErrorProvider errProvider;


    public void SetError(Control control, string value)
    {

        errProvider = new ErrorProvider();

        if (control.Text.Trim().Length == 0)
        {
            errProvider.SetError(control, value);
        }
        else
        {
            errProvider.SetError(control, "");

        }

    }


}

文本框代码的验证是

private void textBox1_Validating(object sender, CancelEventArgs e)
    {

            erp.SetError(textBox1, "Please Enter Name");

    }
  1. 在 texbox 中输入文本后,当我按下回车键时,它工作正常;
  2. 没有在文本框中输入任何内容,当我按 Enter 时,它也 工作正常意味着出现 Waring 红色图标;但是
  3. 警告后,当我在文本框中输入文本后按 Tab 键时, 警告图标不会消失,它应该被删除。

没有类它可以使用相同的代码正常工作

更新?

【问题讨论】:

    标签: c# winforms errorprovider


    【解决方案1】:

    使用字段初始化器

    private readonly ErrorProvider errProvider = new ErrorProvider();
    

    errProvider应该使用Field Initializer,因为每次调用Error.SetError都会构造ErrorProvider,构造出来的ErrorProvider不仅不会消失,只会分层。


    [更新]

    public class Error
    {
        private readonly ErrorProvider errProvider = new ErrorProvider();
        public void SetError(Control control, string value)
        {
    
            if (control.Text.Trim().Length == 0)
            {
                errProvider.SetError(control, value);
            }
            else
            {
                errProvider.SetError(control, "");
            }
        }
    }
    

    【讨论】:

    • 如果您在更改我提供的代码后提供完整代码,我将不胜感激。我是 C# 新手
    【解决方案2】:

    ErrorProvider 的构造移到声明行。所以改变:

    private ErrorProvider errProvider;
    

    到:

    private ErrorProvider errProvider = new ErrorProvider(); 
    

    并摆脱当前在您的 SetError 方法中的该成员的初始化。

    向我们展示如何以及何时创建和存储对您正在使用的 Error 类实例的引用也可能很有用。

    此外,将您的验证代码放在名为 SetError 的方法中有点误导(使您的代码更难维护)。我会将其命名为 ValidateControlHasValue 或类似的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多