2013-03-19 2 views
1

Может кто-нибудь объяснить, почему этот код не работает?Текстовое поле BackColor не меняется

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

Если вы специально не установить цвет фона на белый при инициализации элемента управления текстового поля, вы можете использовать 'TextBox.DefaultBackColor' вместо' Color.White', если пользователь установил другую систему по умолчанию. –

ответ

3

Это не работает только при первом двойном щелчке (он работает, но устанавливает цвет на белый, а не желтый, как вы, вероятно, ожидаете), потому что оператор == сравнивает свойства имени и ARGB цвета, а не только свойство ARGB. Хотя при первом двойном щелчке значения ARGB одинаковы (ARGB=(255, 255, 255, 255)), имена не потому, что исходное свойство BackColor имеет имя «Window», а 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); 
} 
Смежные вопросы