C# WinForms - custom button unwanted border when form unselected

Solution 1:

When you're dealing with a custom button you should set:

button.TabStop = false;
button.FlatStyle = FlatStyle.Flat;
button.FlatAppearance.BorderSize = 0;

Then since ButtonBase doesn't support the border color on Color.Transparent, you can overcome the issue by setting an Argb color:

button.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255); //transparent

Solution 2:

fuex's answer can remove border in theory, but there is a bug that sometimes button will still have focus cue after you change the button enable status.

(I ran into this bug in .Net 4.0 and I don't know the bug is fixed or not in later versions).

To work around this bug, you should disable the ShowFocusCues property:

protected override bool ShowFocusCues => false; // return base.ShowFocusCues;