Search code examples
c#winformsbuttoncolorsbackcolor

How to avoid color changes when button is disabled?


We have a Windows Forms project with quite a few FlatStyle buttons.

When we disable the buttons, the colors of the buttons are changed automatically Frown | :(

Is it possible to override this somehow, so we can control the colors ourselves?


Solution

  • You need to use the EnabledChanged event to set the desired color. Here is an example.

    private void Button1_EnabledChanged(object sender, System.EventArgs e)
    {
        Button1.ForeColor = sender.enabled == false ? Color.Blue : Color.Red;
        Button1.BackColor = Color.AliceBlue;
    }
    

    Use the desired colors according to your requirement.

    Also you need to use the paint event.

    private void Button1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        dynamic btn = (Button)sender;
        dynamic drawBrush = new SolidBrush(btn.ForeColor);
        dynamic sf = new StringFormat {
            Alignment = StringAlignment.Center,
            LineAlignment = StringAlignment.Center
        };
        Button1.Text = string.Empty;
        e.Graphics.DrawString("Button1", btn.Font, drawBrush, e.ClipRectangle, sf);
        drawBrush.Dispose();
        sf.Dispose();
    }