2013-03-19 98 views
1

任何人都可以解釋爲什麼這段代碼不工作?Textbox BackColor not changing

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

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

它工作了幾次,但大多數都不起作用。當我刪除「如果」部分每次都有效,當我用其他代碼替換「this.BackColor = Color.Yellow」時,它也可以工作。 如果有人能說出我做錯了什麼,我將非常感激。

+1

除非你初始化TextBox控件時專門設置背景色爲白色,您可能需要使用'TextBox.DefaultBackColor',而不是' Color.White「以防用戶設置了不同的系統默認值。 – 2013-03-19 01:39:50

回答

3

它只在第一次雙擊時才起作用(它可以工作,但將顏色設置爲白色而不是黃色,因爲您大概期望),因爲==運算符比較了顏色的名稱和ARGB屬性,而不僅僅是ARGB屬性。雖然在第一次雙擊ARGB值是相同的(ARGB=(255, 255, 255, 255)),名稱不是因爲最初的BackColor屬性具有名稱「窗口」,並且Color.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); 
}