I have a button which I wanted to "flash" briefly to get the user's attention. I figured the easiest way would be to change the Button's BackColor
property to another color, and then switch it back again. So I do something like this:
this.oldColor = myButton.BackColor;
myButton.BackColor = Color.Blue;
and then after a about 1/2 a second:
myButton.BackColor = this.oldColor;
But the button's background color end up being distinctly darker than the rest of the buttons on the Form!
At first, I thought it was because there's something special about the button's original color being a named color (in this case, "Control") but it isn't.
What's worse, when I look at myButton.BackColor
in the debugger, I get
{Name=Control, ARGB=(255, 236, 233, 216)}
Which is exactly correct! But when I take a screenshot, and check the color, it isn't the same as the rest of the buttons!
Is there some kind of masking going on? Or perhaps some kind of dithering?
I figured out the cause for the problem. Turns out there's another property (for Buttons and TabPages only, it seems) named UseVisualStyleBackColor
. It controls whether or not to use "Visual Styles" when calculating the BackColor
. And to make matters worse, as soon as you set the BackColor
, it's set to false
. So I just ended up doing this:
this.oldUseVisualStyleBackColor = myButton.UseVisualStyleBackColor;
this.oldColor = myButton.BackColor;
myButton.BackColor = Color.Blue;
And when I'm ready to reset it:
myButton.BackColor = this.oldColor;
myButton.UseVisualStyleBackColor = this.oldUseVisualStyleBackColor;
(Yes, you have to reset the BackColor
first, and only then set UseVisualStyleBackColor
.)
I have no idea why the UseVisualStyleBackColor
is being used, or why it does what it does, but it seems to work now.
(Thanks, Marc! I wouldn't have found this without your help!)