更改 ErrorProvider 的图标会出现异常

Changing the icon of ErrorProvider gives exception

我正在尝试更改 Windowsform 中 errorProvider 的图标。我在 Properties->Resources 文件夹中添加了 .ico 文件。我试过直接复制粘贴 .ico 文件,也使用了添加资源-> 添加现有文件选项。无论我做什么,如果我添加自己的 .ico 文件并尝试将它们设置为 errorProvider 图标,如下面的代码所示,我会在 运行 程序时遇到异常(特别是在尝试演示 errorProvider 功能时在我的程序中)。我的代码是:

 private void textBox1_Leave(object sender, EventArgs e)
        {
            if(string.IsNullOrEmpty(textBox1.Text))
            {
                textBox1.Focus();
                errorProvider1.Icon = Properties.Resources.cross; //here I have change the default icon
                errorProvider1.SetError(this.textBox1, "Input UserId"); //having exception in this line
            }
            else
            {
                errorProvider1.Icon = Properties.Resources.right;
            }
        }

异常详情:

System.WhosebugException
  HResult=0x800703E9
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>

首先将你的 ico 文件添加到资源并将“复制到输出目录”设置为始终复制

Copy to Outpot Directory Example

 private void textBox1_Validating(object sender, CancelEventArgs e)
    {
        if (textBox1.Text.Trim() == "") 
        {
            errorProvider1.SetError(textBox1, "ERROR WARNING");
            errorProvider1.Icon = new Icon(@"Resources\termicon.ico");
        }
            
        
    
    }

Example

通过Resource.resx添加资源也可以很好的引用ico。 Copy if new是另一种调用方式。

添加现有资源:

最好将 leave 事件更改为 Validating 事件。

我自己测试了你的代码,没有问题。

我这里有 reproduced the error 因为它是由 ico file itself.

引起的

换个图就可以解决

The error document is here.

private void TextBox1_Validating(object sender, CancelEventArgs e) {
    if(string.IsNullOrEmpty(textBox1.Text)) {
            textBox1.Focus();
            errorProvider1.Icon=Properties.Resources.error__3_; //here I have change the default icon
            errorProvider1.SetError(textBox1, "Input UserId"); //having exception in this line
        } else {
            errorProvider1.Icon=Properties.Resources.yes1;
    }
}

您可以使用文件转换器转换为 ico。

输出: