netlib.narod.ru | < Назад | Оглавление | Далее > |
По умолчанию, кнопки (и другие элементы управления) наследуют свойства Font, ForeColor и BackColor от своих предков. Если в программе создаются дочерние элементы управления, а затем изменяется шрифт, цвет текста или цвет фона, то внешний вид дочерних элементов управления изменяется соответственно. Так, в программе TwoButtons можно вставить инструкцию:
BackColor = Color.Blue;
где угодно в конструкторе или даже в методе ButtonOnClick. Инструкция изменит цвет фона формы на голубой, и цвет фона кнопок тоже станет голубым.
Но можно изменить свойства Font, ForeColor или BackColor для одной из кнопок:
btnSmaller.BackColor = Color.Red;
После выполнения этой инструкции цвет фона кнопки btnSmaller изменится на красный. (Можно изменить либо свойство ForeColor, либо BackColor на Color.Transparent, либо любой другой частично или полностью прозрачный цвет.) Что же произойдет при выполнении следующей инструкции?
BackColor = Color.Magenta;
Фон формы станет пурпурным, фон кнопки btnLarger — тоже, но фон кнопки btnSmaller останется красным.
Как это работает? Элемент управления отслеживает программно измененные свойства и не изменяет их при изменении соответствующего свойства предка. Следующие методы восстанавливают устанавливаемое по умолчанию состояние элемента управления, т.е. наследуют эти свойства от предка:
Методы Control (выборочно)
void ResetFont() |
void ResetForeColor() |
void ResetBackColor() |
Свойство TextAlign, заданное в классе ButtonBase определяет местоположение текста на кнопке:
Свойства ButtonBase (выборочно)
Тип | Свойство | Доступ |
ContentAlignment | TextAlign | Чтение/запись |
Этому свойству можно присвоить одно из значений перечисления ContentAlignment. Как ни странно, ContentAlignment определено в пространстве имен System.Drawing, хотя и не используется в сочетании ни с каким классом из этого пространства имен.
Перечисление ContentAlignment
Член | Значение |
TopLeft | 0x0001 |
TopCenter | 0x0002 |
TopRight | 0x0004 |
MiddleLeft | 0x0010 |
MiddleCenter | 0x0020 |
MiddleRight | 0x0040 |
BottomLeft | 0x0100 |
BottomCenter | 0x0200 |
BottomRight | 0x0400 |
Хотя эти значения представляют собой битовые флаги, данная особенность — наследие ранней версии Windows Forms. He пытайтесь объединить несколько значений ContentAlignment! Для кнопок устанавливаемым по умолчанию значением TextAlign является MiddleCenter, что не кажется очевидным до тех пор, пока кнопка не станет заметно больше, чем размещенный на ней текст.
Класс ButtonBase содержит еще одно свойство, влияющее на внешний вид кнопки:
Свойства ButtonBase (выборочно)
Тип | Свойство | Доступ |
FlatStyle | FlatStyle | Чтение/запись |
FlatStyle — это перечисление, определенное в пространстве имен System.Windows.Forms:
Перечисление FlatStyle
Член | Значение | Описание |
Flat | 0 | Плоская, а не объемная |
Popup | 1 | Объемная при прохождении няд ней курсора мыши |
Standard | 2 | Обычная объемная |
System | 3 | Стандартная для ОС |
Значением по умолчанию является FlatStyle.Standard.
Следующая программа рисует 4 кнопки всеми четырьмя стилями. Обратите внимание, как здесь используется статический метод Enum.GetValues для получения массива всех значений FlatStyle. Каждое из них позволяет задать свойства кнопки FlatStyle и Text.
ButtonStyles.cs
//--------------------------------------------- // ButtonStyles.cs (C) 2001 by Charles Petzold //--------------------------------------------- using System; using System.Drawing; using System.Windows.Forms; class ButtonStyles: Form { public static void Main() { Application.Run(new ButtonStyles()); } public ButtonStyles() { Text = "Button Styles"; int y = 0; foreach (FlatStyle fs in Enum.GetValues(typeof(FlatStyle))) { Button btn = new Button(); btn.Parent = this; btn.FlatStyle = fs; btn.Text = fs.ToString(); btn.Location = new Point(50, y += 50); } } }
Вот результат работы этой программы:
Стиль Standard совпадает со стилем System, но на рисунке кнопка Standard имеет фокус ввода и, таким образом, является кнопкой по умолчанию.
netlib.narod.ru | < Назад | Оглавление | Далее > |