Textbox BackColor不会改变

时间:2013-03-19 01:13:01

标签: c# colors textbox

有谁可以解释为什么这段代码不起作用?

 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”时,它也有效。 如果有人能说出我做错了什么,我将非常感激。

1 个答案:

答案 0 :(得分:3)

它不仅仅在第一次双击时起作用(它可以正常工作但是将颜色设置为白色而不是黄色),因为==运算符比较颜色的名称和ARGB属性,而不仅仅是ARGB属性。虽然在第一次双击时ARGB值是相同的(ARGB=(255, 255, 255, 255)),但名称不是因为初始BackColor属性具有名称“Window”而Color.White具有Name属性“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);
}