Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体-错误提供程序重叠图标_C#_.net_Winforms_Errorprovider - Fatal编程技术网

C# Windows窗体-错误提供程序重叠图标

C# Windows窗体-错误提供程序重叠图标,c#,.net,winforms,errorprovider,C#,.net,Winforms,Errorprovider,我正在使用ErrorProvider中的自定义图标 ErrorProvider.BlinkStyle = ErrorBlinkStyle.NeverBlink 我遇到了一个问题,即使用类似于此代码的重叠图标: public partial class TestForm : Form { private ErrorProvider _errorProvider1; private ErrorProvider _errorProvider2; private CheckBo

我正在使用ErrorProvider中的自定义图标

ErrorProvider.BlinkStyle = ErrorBlinkStyle.NeverBlink
我遇到了一个问题,即使用类似于此代码的重叠图标:

public partial class TestForm : Form
{
    private ErrorProvider _errorProvider1;
    private ErrorProvider _errorProvider2;
    private CheckBox _control1;
    private CheckBox _control2;

    //...


    private void ValidateAll()
    {
        _errorProvider1.Clear();
        _errorProvider2.Clear();

        _errorProvider1.SetError(_control1, string.Empty);
        _errorProvider2.SetError(_control2, string.Empty);

        if(Validate(_control1.Checked))
        {
            _errorProvider1.SetError(_control1, "Error1");
        }

        if(Validate(_control2.Checked))
        {
            _errorProvider2.SetError(_control2, "Error2");
        }
    }

    //...
}
我正在与_control1交互,而_control2有一些错误(已检查),因此_errorProvider2有一些错误集。每次调用ValidateAll方法时,它都会为_control1正确设置_errorProvider1,但_control2 _errorProvider2会在不删除旧图标的情况下继续绘制额外图标

与_control2交互时,_errorProvider2将恢复正常,但_control1的_errorProvider1将执行相同的操作,直到“单击”为止

请注意,底层控件不影响它;它不必是复选框

我尝试的是:

  • 每个表单/控件仅使用一个ErrorProvider
  • 在设置ErrorProvider之前聚焦每个控件
  • 不清除错误提供程序

非常感谢您的帮助,谢谢

使用多个ErrorProvider是没有意义的,其中一个可以处理表单上所有控件的错误。最简单的方法,以避免由于试图羊群多个供应商的错误。我不能复制。一切如期进行。发布重现问题的代码。此外,我认为遵循Hans的建议应该可以解决您的问题。我只是在VS2017上尝试了完全相同的代码,而不是在VS2015(以及新的.Net版本)上尝试了相同的代码,而且它似乎在@HansPassant上起到了作用。我提到,我尝试了两种方法,但这不是这里的问题。为了简单起见,我刚刚发布了带有多个错误提供程序的版本。