Вопрос по visual-studio, backcolor, .net, button, winforms – Как восстановить по умолчанию кнопку BackColor?

36

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

Screenshot of buttons

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

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

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

Ваш Ответ

9   ответов
1
Button1.BackColor = Color.Gainsboro
Отлично, этот комментарий полезен для сброса кнопки цвета по умолчанию
Как правило, ответы гораздо полезнее, если они включают в себя объяснение того, для чего предназначен код, и почему это решает проблему, не представляя других.
63

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

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

То, что здесь произошло, это то, что вы фактически установили пользовательский цвет фона для элемента управления кнопки (вы установили его в качестве цвета фона для 3D-элемента управления, но он также мог бы быть фиолетовым), и это принудило WinForms к Пользовательский нарисовать элемент управления и закрасить его фон указанным вами цветом. Это то, что придает ему «плоскость». Внешний вид & # x2014; цвет фона теперь окрашивается одним пользовательским цветом, а не с использованием эффекта градиента по умолчанию. Это было бы не так заметно в теме Windows Classic (pre-Aero), потому что кнопки на самом делеwere окрашены в плоский цвет 3D управления. Но в Aero добавлены градиенты и прочее "горячее" эффекты, которые заставляют это торчать как больной большой палец.

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

myButton.BackColor = default(Color);

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

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

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

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

В настоящее время вы также можете вызвать методbutton1.ResetBackColor(), но вам все равно нужно установитьbutton1.UseVisualStyleBackColor = true.
FlatStyle великолепен.
Отличное объяснение!
Что такое соответствующая версия VB.NETdefault(Color)?
@PeterMortensen:New Color() работал на меня.
13

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

Просто измените это обратно на true, и вы должны быть настроены!

3

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

Button1.BackColor = SystemColors.ButtonFace;
Button1.ForeColor = default(Color);
Button1.UseVisualStyleBackColor = true;
9

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

Button1.BackColor = SystemColors.ButtonFace
Button1.UseVisualStyleBackColor = True
UseVisualStyleBackColor = true мне было достаточно, чтобы заставить его работать.
0

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

PropertyName - это BackColor, а нужный цвет - в Системных цветах - & gt; контроль

3

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

CommandButton1.BackColor = vbButtonFace
3
Button1.BackColor = Color.FromKnownColor(KnownColor.Control)

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

0

Ссылаясь на название вашего вопроса,"How to reset to default button BackColor?" Я решил свою проблему следующим образом:

Создайте еще одну кнопку, скажемButtonFooи установите его как невидимое,

ButtonFoo.visible = False

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

ButtonChangedColor.BackColor = ButtonFoo.BackColor

Вот, пожалуйста. цвет восстановлен по умолчанию :)

Похожие вопросы