Как сбросить кнопку BackColor по умолчанию?

Я экспериментировал с различными вариантами цвета фона кнопки и в итоге изменил свойство BackColor в категории «Внешний вид». Затем я изменил его на то, что по умолчанию, то есть на Control, но он все еще отличается от других кнопок:

Скриншот кнопок

Я попытался собрать проект и перезапустить Visual Studio, но это не помогло.

Я знаю, что могу просто перетащить другую кнопку и скопировать/вставить код, но что в первую очередь вызывает это и как мне правильно это исправить?


person Dennis Zaitsev    schedule 13.05.2012    source источник
comment
Если изменено в режиме дизайна, просто перейдите к свойству [back color] (в режиме дизайна) и щелкните правой кнопкой мыши. Вы получите меню, чтобы вернуться к умолчанию.   -  person Michael Z.    schedule 29.10.2016


Ответы (11)


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

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

Здесь произошло то, что вы фактически установили пользовательский цвет фона для элемента управления кнопки (вы установили его на цвет фона 3D-элемента управления, но он мог бы так же легко быть фиолетовым), и это вынуждает WinForms настраивать элемент управления. и закрасьте его фон указанным цветом. Это то, что придает ему «плоский» вид — цвет фона теперь окрашивается одним пользовательским цветом, а не с использованием эффекта градиента по умолчанию. Это было бы не так заметно в теме Windows Classic (до Aero), потому что кнопки на самом деле были окрашены цветом плоского элемента управления 3D. Но Aero добавил градиенты и другие «горячие» эффекты, из-за чего это торчало как больной палец.

Чтобы очистить значение, которое вы установили, и восстановить окружающий характер свойства, вы можете щелкнуть правой кнопкой мыши свойство в окне свойств и выбрать «Сброс». Вы также можете сделать это с помощью кода, установив для свойства значение default(Color):

myButton.BackColor = default(Color);

Вам также потребуется установить свойство UseVisualStyleBackColor обратно на true, которое автоматически устанавливается на false всякий раз, когда свойство BackColor изменяется для поддержки пользовательского цвета фона.

В качестве альтернативы вы можете указать WinForms полностью игнорировать такие пользовательские свойства и попросить Windows отрисовать элемент управления кнопкой. Сделайте это, установив для свойства FlatStyle значение FlatStyle.System.

Опять же, это можно сделать либо в дизайнере, либо через код. Это не только предотвратит изменение таких глупых вещей, как цвет фона, создавая ужасно уродливый элемент управления, но также восстановит исходное поведение элемента управления кнопки Win32 для вашего приложения WinForms, включая тонкие эффекты затухания Aero при наведении.

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

person Cody Gray    schedule 13.05.2012
comment
Какова соответствующая версия VB.NET для default(Color)? - person Peter Mortensen; 20.09.2013
comment
В настоящее время вы также можете вызвать метод button1.ResetBackColor(), но вам все равно нужно установить button1.UseVisualStyleBackColor = true. - person Anlo; 23.10.2018

Когда вы меняете цвет фона по умолчанию, свойство UseVisualStyleBackColor переворачивается на false.

Просто измените это на true, и все будет готово!

person pglynn    schedule 13.05.2012

Чтобы восстановить цвет фона кнопки по умолчанию, используйте;

Button1.BackColor = SystemColors.ButtonFace
Button1.UseVisualStyleBackColor = True
person Muhammad Saqib    schedule 21.08.2014
comment
UseVisualStyleBackColor = true мне было достаточно, чтобы заставить его работать. - person Sebastian Ax; 13.09.2018

Что сработало для меня:

CommandButton1.BackColor = vbButtonFace
person user4854277    schedule 01.05.2015

Button1.BackColor = Color.FromKnownColor(KnownColor.Control)

Используйте FromKnowColor для доступа к системным цветам. Это действительно так просто.

person LordPhantom    schedule 28.10.2016

Чтобы восстановить фон и передний план по умолчанию для кнопки, используйте:

Button1.BackColor = SystemColors.ButtonFace;
Button1.ForeColor = default(Color);
Button1.UseVisualStyleBackColor = true;
person Ady    schedule 18.02.2018
comment
«SystemColors» не содержит определения для «ButtonFace». - person Paul McCarthy; 08.05.2020
comment
вы используете Блокнот для программирования? - person Ady; 01.06.2020
comment
Настоящие программисты используют vi :-) - person Paul McCarthy; 02.06.2020

Ссылаясь на заголовок вашего вопроса "Как сбросить кнопку BackColor по умолчанию?", я решил свою проблему следующим образом:

Создайте еще одну кнопку, например ButtonFoo, и сделайте ее невидимой.

ButtonFoo.visible = False

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

ButtonChangedColor.BackColor = ButtonFoo.BackColor

Ну вот; цвет восстанавливается по умолчанию :)

person Baby    schedule 20.05.2014

В Winforms цвет по умолчанию — Control. Вы можете установить его на панели свойств в VS.

PropertyName — BackColor, а нужный цвет находится в System Colors -> Control.

person Guy Heylens    schedule 25.04.2018

**Используйте это, пожалуйста**

myButton.BackColor = default(Color);
person M Arslan Riaz    schedule 03.04.2019

tmpButtonCtrl.BackColor = DefaultBackColor
tmpButtonCtrl.ForeColor = DefaultForeColor
tmpButtonCtrl.UseVisualStyleBackColor = True

.NET Framework 4.5
VB.Net Visual Studio 2013

person Tim Raykowski    schedule 12.06.2019
comment
Пожалуйста, отредактируйте свой ответ, добавив больше объяснений, вы также можете поместить свой код в отступ, чтобы он выглядел лучше. - person Yonlif; 13.06.2019

person    schedule
comment
Как правило, ответы гораздо полезнее, если они включают объяснение того, для чего предназначен код, и почему это решает проблему, не вводя других. - person Tim Diekmann; 23.05.2018
comment
Отлично, этот комментарий полезен для кнопки сброса цвета по умолчанию - person anhvietcr; 02.01.2019