Рис. 21.18. Страница TrackBar
Сначала, используя окно проектирования формы, разместите три элемента управления TrackBar на первой вкладке и назначьте соответствующим членам-переменным подходящие имена (redTrackBar, greenTrackBar и blueTrackBar). Затем обработайте событие Scroll для каждого TrackBar. Вот подходящий программный код InitializeComponent() для blueTrackBar (программный код остальных полос почти идентичен данному, за исключением имени обработчика события Scroll).
private void InitializeComponent() {
…
//
// blueTrackBar
//
this.blueTrackBar.Maximum = 255;
this.blueTrackBar.Name = "blueTrackBar";
this.blueTrackBar.TickFrequency = 5;
this.blueTRackBar.TickStyle = System.Windows.Forms.TickStуle.TopLeft;
this.blueTrackBar.Scroll += new System.EventHandler(this.blueTrackBar.Scroll);
…
}
Заметим, что минимальным значением по умолчанию для TrackBar является 0, поэтому его явно устанавливать не нужно. В обработчиках событий Scroll для каждого TrackBar выполняется вызов вспомогательной функции UpdateColor(), которую нам еще предстоит написать.
private void blueTrackBar_Scroll(object sender, EventArgs e) {
UpdateColor();
}
Функция UpdateColor() отвечает за решение двух главных задач. Во-первых, нужно прочитать текущее значение каждого TrackBar и использовать эти данные для вычисления нового Color с помощью Color.FromArgb(). Имея новый готовый цвет, следует соответствующим образом обновить член-переменную PictureBox (с именем colorBox), чтобы установить текущий цвет фона. Наконец, UpdateColor() комбинирует значения ползунков в строке, размещаемой в элементе Label(lblCurrColor), как показано ниже.
private void UpdateColor() {
// Получение нового цвета на основе значений ползунков.
Color с = Color.FromArgb(redTrackBar.Value, greenTrackBar.Value, blueTrackBar.Value);
// Изменение цвета в PictureBox.
colorBox.BackColor = c;
// Установка текста для надписи.
lblCurrColor.Text = string.Format("Текущие цветовые значения: ({0}, {1}, (2})", redTrackBar.Value, greenTrackBar.Value, blueTrackBar.Value);
}
Заключительным штрихом является установка начальных значений каждого ползунка при начальном появлении формы и отображение текущего цвета, как показано ниже.
public MainWindow() {
InitializeComponent();
CenterToScreen();
// Установка исходного положения ползунков.
redTrackBar.Value = 100;
greenTrackBar.Value = 255;
blueTrackBar.Value = 0;
UpdateColor();
}
Как вы уже видели, элемент управления GroupBox может использоваться для того, чтобы логически объединить ряд элементов управления (например, переключателей) и заставить их функционировать во взаимосвязи. Элемент управления Panel в этом смысля является близким к GroupBox. Элементы управления Panel тоже используются для группировки родственных элементов управления в логические единицы. Одним из различий является то, что тип Panel получается из класса ScrollableControl, поэтому Panel может поддерживать полосы прокрутки, чего нет у GroupBox.
Элементы управления Panel могут также использоваться для "консервации" содержимого экрана. Например, если у вас есть группа элементов управления, которые занимают всю нижнюю половину формы, вы можете поместить эту группу в Panel половинного размера и установить значение true (истина) для свойства AutoScroll. Тогда пользователь сможет использовать полосу (или полосы) прокрутки, чтобы просмотреть весь набор элементов. К тому же, если для свойства BorderStyle элемента Panel установить значение None, то этот тип можно будет использовать для группировки набора элементов, которые очень легко показать или скрыть способом. совершенно прозрачным в отношении конечного пользователя.
Для примера давайте добавим на вторую страницу TabControl два типа Button (с именами btnShowPanel и btnHidePanel) и один тип Panel, который содержит пару текстовых блоков (txtNormalText и txtUpperText) с инструктирующим элементом Label. (Какие именно элементы находятся в Panel, для этого примера не очень важно.) На рис. 21.19 показан окончательный вид соответствующей страницы.
С помощью окна свойств обработайте событие TextChanged для первого элемента TextBox, и в сгенерированном обработчике события поместите в txtUpperText преобразованный в верхний регистр текст, введенный в txtNormalText.
private void txtNormal'Text_TextChanged(object sender, EventArgs e) {
txtUpperText.Text = txtNormalText.Text.ToUpper();
}
Рис. 21.19. Страница Panel
Читать дальше