Dot-Net

當我將 .NET 按鈕的 BackColor 更改回其原始值時,它看起來不再一樣了

  • October 23, 2017

我有一個按鈕,我想簡單地“閃爍”以引起使用者的注意。我認為最簡單的方法是將 Button 的BackColor屬性更改為另一種顏色,然後再將其切換回來。所以我做這樣的事情:

this.oldColor = myButton.BackColor;
myButton.BackColor = Color.Blue;

然後大約 1/2 秒後:

myButton.BackColor = this.oldColor;

但是按鈕的背景顏色最終明顯比表單上的其他按鈕更暗!

起初,我認為這是因為按鈕的原始顏色是命名顏色(在本例中為“Control”)有一些特別之處,但事實並非如此。

更糟糕的是,當我myButton.BackColor在調試器中查看時,我得到了

{Name=Control, ARGB=(255, 236, 233, 216)}

這是完全正確的!但是當我截屏並檢查顏色時,它與其餘按鈕不一樣!

是否有某種掩蔽發生?或者也許是某種抖動?

我找出了問題的原因。原來還有另一個名為UseVisualStyleBackColor. 它控制在計算BackColor. 更糟糕的是,一旦你設置了BackColor,它就會設置為false。所以我最終這樣做了:

this.oldUseVisualStyleBackColor = myButton.UseVisualStyleBackColor;
this.oldColor = myButton.BackColor;
myButton.BackColor = Color.Blue;

當我準備好重置它時:

myButton.BackColor = this.oldColor;
myButton.UseVisualStyleBackColor = this.oldUseVisualStyleBackColor;

(是的,您必須先重置BackColor,然後才能設置UseVisualStyleBackColor。)

我不知道為什麼UseVisualStyleBackColor要使用它,或者它為什麼會這樣做,但它現在似乎可以工作了。

(謝謝​​,馬克!如果沒有你的幫助,我不會找到這個!)

引用自:https://stackoverflow.com/questions/506641