使用类的 ErrorProvider

发布于 2024-12-12 09:24:59 字数 852 浏览 0 评论 0原文

我制作了以下课程,以避免重复 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 中输入文本后,当我按 Enter 时,它工作正常;
  2. 无需在文本框中输入任何内容,当我按 Enter 时,它也会 工作正常表示出现Waring 红色图标;但
  3. 在警告之后,当我在文本框中输入文本后按 Tab 时, 警告图标不会消失,应该将其删除。

没有类,它可以在相同的代码更新下正常工作吗

I have made the following class to avoid the repetition if else code , again and again :

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, "");

        }

    }


}

and validation on textbox code is

private void textBox1_Validating(object sender, CancelEventArgs e)
    {

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

    }
  1. After typing the text in texbox, as I press enter, it working fine;
  2. Without Entering any thing in textbox, as I press Enter , it also
    working fine means Waring red icon appears; BUT
  3. after warning, as I press tab after entering text in textbox ,
    warning Icon does not disappear , it sould be removed.

without class it is working fine with the same code

update?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放飞的风筝 2024-12-19 09:24:59

使用Field Initializer

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, "");
        }
    }
}

Use Field Initializer

private readonly ErrorProvider errProvider = new ErrorProvider();

You should use Field Initializer for errProvider, because every time calling Error.SetError, ErrorProvider will be constructed, and a constructed ErrorProvider will not only no disappear but also be just layered.


[updated]

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, "");
        }
    }
}
烟柳画桥 2024-12-19 09:24:59

ErrorProvider 的构造移至声明行。因此,将: 更改

private ErrorProvider errProvider;

为:

private ErrorProvider errProvider = new ErrorProvider(); 

并删除当前在 SetError 方法中的该成员的初始化。

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

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

Move the construction of your ErrorProvider to the declaration line. So change:

private ErrorProvider errProvider;

to:

private ErrorProvider errProvider = new ErrorProvider(); 

and get rid of the initialization of that member that is currently in your SetError method.

It might also prove useful to show us how and when you are creating and storing a reference to the Error class instance you are using.

Also, putting your validation code inside of a method that is called SetError is a bit misleading (making your code harder to maintain). I'd name it something like ValidateControlHasValue or something like that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文