1

谁能解释为什么这段代码不起作用?

 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”时它也有效。如果有人能告诉我我做错了什么,将不胜感激。

4

1 回答 1

3

它不仅在第一次双击时起作用(它起作用但将颜色设置为白色而不是您可能期望的黄色),因为==运算符比较颜色的名称和 ARGB 属性,而不仅仅是 ARGB 属性。虽然第一次双击 ARGB 值相同(ARGB=(255, 255, 255, 255)),但名称不同,因为初始BackColor属性的名称为“Window”,而 Color.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);
}
于 2013-03-19T01:21:56.463 回答