Ответ 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, которые в течение многих лет могли делать всевозможные уродливые средства управления.