C# 文本框背景色不变

C# 文本框背景色不变,c#,colors,textbox,C#,Colors,Textbox,有人能解释为什么这个代码不起作用吗 protected override void OnMouseDoubleClick(MouseEventArgs e) { if (this.BackColor == Color.White) { this.BackColor = Color.Yellow; } else {

有人能解释为什么这个代码不起作用吗

 protected override void OnMouseDoubleClick(MouseEventArgs e)
        {
            if (this.BackColor == Color.White)
            {
                this.BackColor = Color.Yellow;

            }
            else
            {
                this.BackColor = Color.White;
            }
                base.OnMouseDoubleClick(e);
        }
它工作了几次,但大部分都不起作用。当我删除“if”部分时,它每次都工作,当我用其他代码替换“this.BackColor=Color.Yellow”时,它也工作。
如果有人能告诉我我做错了什么,我会非常感激。

它不仅在第一次双击时起作用(它可以工作,但会按照您的预期将颜色设置为白色而不是黄色),因为
=
操作符比较颜色的名称和ARGB属性,而不仅仅是ARGB属性。虽然在第一次双击时,ARGB值是相同的
(ARGB=(255,255,255,255))
,但名称不是相同的,因为初始
BackColor
属性具有名称“Window”和颜色。White具有名称属性“White”的值,因此它们不相同。你可以自己在调试器中检查

为避免此问题,您可以按如下方式重写代码:

protected override void OnMouseDoubleClick(MouseEventArgs e)
{
      //compare ARGB values
      if (this.BackColor.ToArgb() == Color.White.ToArgb())
      {
           this.BackColor = Color.Yellow;

      }
      else
      {
           this.BackColor = Color.White;
      }
      base.OnMouseDoubleClick(e);
}

除非在初始化textbox控件时专门将背景色设置为白色,否则如果用户设置了不同的系统默认值,您可能希望使用
textbox.DefaultBackColor
而不是
color.white