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");
}
}
//...
}
_control2にエラーがある (がCheckedである)間に_control1と対話しているため、 _errorProvider2にエラーが設定されています。ValidateAllメソッドが呼び出されるたびに、 _control1に対して_errorProvider1が正しく設定されますが、 _control2 _errorProvider2は古いアイコンを消去せずに余分なアイコンを描画し続けます。
_control2と対話すると、_errorProvider2は通常に戻りますが、_control1の_errorProvider1は「クリック」されるまで同じことを行います。
基になる Control は影響しないことに注意してください。CheckBox である必要はありません。
私が試したこと:
- フォーム/コントロールごとに 1 つの ErrorProvider のみを使用して、
- ErrorProvider を設定する前に各コントロールにフォーカスし、
- ErrorProviders をクリアしない
どんな助けでも大歓迎です、ありがとう!