C # WinForms - настраиваемая кнопка нежелательной границы, когда форма не выбрана - PullRequest
37 голосов
/ 22 февраля 2012

У меня проблема с пользовательской кнопкой, созданной в формах c # win. Кнопка появляется нормально, когда форма выбрана, но как только я щелкаю по форме, на кнопке появляется граница. Хорошим примером того, когда это происходит, является щелчок по рабочему столу, но форма по-прежнему развернута, чтобы вы могли видеть ее содержимое. Изображение проблемы можно увидеть ниже:

Button border problem

Это происходит не на всех кнопках, только если кнопка была нажата ранее (отображается только для одной кнопки за раз). Это заставило меня поверить в то, что это было как-то связано с сигналами фокусировки на кнопке, но они установлены в false. Граница установлена ​​в 0, и у меня также есть вкладка, установленная в ложь.

Есть предложения?

Ответы [ 2 ]

92 голосов
/ 22 февраля 2012

Когда вы имеете дело с пользовательской кнопкой, вы должны установить:

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

Тогда, поскольку ButtonBase не поддерживает цвет границы на Color.Transparent, вы можете решить эту проблему, установив цвет Argb:

button.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255); //transparent
3 голосов
/ 05 октября 2015

Ответ fuex теоретически может удалить границу, но есть ошибка, из-за которой иногда кнопка все равно будет иметь фокусную метку после изменения состояния включения кнопки.

(я столкнулся с этой ошибкой в ​​.Net 4.0 и не знаю, исправлена ​​ли ошибка в более поздних версиях).

Чтобы обойти эту ошибку, вы должны отключить свойство ShowFocusCues:

protected override bool ShowFocusCues
{
    get
    {
        // return base.ShowFocusCues;
        return false;
    }
}
...