【问题标题】:Textbox BackColor not changing文本框背景颜色不变
【发布时间】:2013-03-19 01:13:00
【问题描述】:

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

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

【问题讨论】:

  • 除非您在初始化文本框控件时专门将背景颜色设置为白色,否则您可能希望使用TextBox.DefaultBackColor 而不是Color.White,以防用户设置了不同的系统默认值。

标签: c# colors textbox


【解决方案1】:

它不仅在第一次双击时起作用(它起作用但将颜色设置为白色而不是您可能期望的黄色),因为== 运算符比较颜色的名称和 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多