Подтвердить что ты не робот

Как reset по умолчанию кнопка BackColor?

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

Screenshot of buttons

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

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

4b9b3361

Ответ 1

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

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

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

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

myButton.BackColor = default(Color);

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Button1.BackColor = SystemColors.ButtonFace
Button1.UseVisualStyleBackColor = True

Ответ 4

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

CommandButton1.BackColor = vbButtonFace

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Button1.BackColor = Color.Gainsboro

Ответ 8

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

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

ButtonFoo.visible = False

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

ButtonChangedColor.BackColor = ButtonFoo.BackColor

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

Ответ 9

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

PropertyName - это BackColor, а нужный цвет - в Системных цветах → Управление.

Ответ 10

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

myButton.BackColor = default(Color);

Ответ 11

tmpButtonCtrl.BackColor = DefaultBackColor
tmpButtonCtrl.ForeColor = DefaultForeColor
tmpButtonCtrl.UseVisualStyleBackColor = True
.NET Framework 4.5
VB.Net Visual Studio 2013