Удалить границу кнопки на вкладке С# winforms

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

Это можно увидеть на изображении ниже. Слева кнопка с черной рамкой, справа другая кнопка, но показано, как должна выглядеть кнопка отмены.

Кнопки


person shane12195    schedule 01.04.2012    source источник
comment
Возможный дубликат: stackoverflow.com/questions/148729/   -  person James Gaunt    schedule 01.04.2012
comment
Вы должны сделать что-то разумное, чтобы указать на фокус. Именно для этого предназначен черный прямоугольник. Полное его удаление просто приводит к тому, что пользователи теряются и разочаровываются при использовании вашего пользовательского интерфейса.   -  person Hans Passant    schedule 01.04.2012
comment
Согласен с гансом, даже если убрать бордюр, то стоит подумать о добавлении блика (смена изображения на более яркое в фокусе или еще что-то). работа с пользовательским интерфейсом, к которому привыкли пользователи, не является хорошей идеей, если вы не уверены на 100% в том, что делаете.   -  person Saeid Yazdani    schedule 02.04.2012
comment
@ Sean87 Привет, Шон и Ганс, я намерен добавить подсветку к кнопке, когда она выбрана, я бы оставил границу, только она выглядит не очень хорошо.   -  person shane12195    schedule 03.04.2012


Ответы (5)


Я не получаю эту границу, если я устанавливаю BoderSize в 0 в разделе FlatAppearance.


Дальнейшее исследование показывает, что эта рамка появляется только тогда, когда кнопка является кнопкой по умолчанию. Вы можете создать свою собственную кнопку, которая никогда не показывает эту границу, как это

public class NoNotifyButton: System.Windows.Forms.Button
{
    public override void NotifyDefault(bool value)
    {
    }
}

Примечание: NotifyDefault намеренно остается пустым.

person Olivier Jacot-Descombes    schedule 01.04.2012
comment
Привет, я пытался сделать это, используя метод здесь (это выделенный ответ) social.msdn.microsoft.com/Forums/da-DK/winforms/thread/ Но проблема остается. - person shane12195; 03.04.2012
comment
Примечание. Вокруг кнопки по умолчанию обведена черная рамка, а вокруг кнопок с фокусом — серая рамка. Мой код заставляет черную рамку исчезнуть; однако серый остается. - person Olivier Jacot-Descombes; 03.04.2012

Вы должны создать новый класс кнопки, используя IButtonControl и изменить NotifyDefault на false:

base.NotifyDefault(false);
person Saeid Yazdani    schedule 01.04.2012

Вам не нужно создавать производный класс. Вы можете установить ForeColor таким же, как BackColor родительского элемента управления. Следующее :

btn1.ForeColor = btn1.Parent.BackColor;
person Amit Lipman    schedule 21.12.2015

Вы можете сделать это, установив для свойства кнопки "ForeColor" значение прозрачности.

person nohack12    schedule 10.06.2015

Мне удалось обойти это, установив для свойства кнопки TabStop значение False, а затем используя этот код в событии нажатия кнопки

private void sendBackTab()
        {
            System.Windows.Forms.SendKeys.SendWait("+{TAB}");
        }
person cbyte    schedule 02.02.2016