Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
П_З.docx
Скачиваний:
3
Добавлен:
24.08.2019
Размер:
179.91 Кб
Скачать

  1. Цвета

Проект COLORS знакомит с типами, предназначенными для работы с цветом (color, KnownColor, colorTranslator), и с компонентами, обеспечивающими прокрутку данных (TrackBar, HScrollBar, VScrollBar). Кроме того, описывается способ доступа к компонентам через клавиши-ускорители связанных с ними меток, и рассматриваются варианты привязки компонентов к границам формы (anchoring).

Определение цвета как комбинации четырех цветовых составляющих.

Ползунки

После создания проекта COLORS разместите в форме Form1 компонент типа TrackBar (он получит имя trackBar1) и настройте свойства формы и компонента trackBar1.

Не снимая выделения с компонента trackBar1, нажмите клавиатурную комбинацию <Ctrl>+<C>, а затем четыре раза — комбинацию <Ctrl>+<V>. В результате в форму будут добавлены еще четыре компонента TrackBar с именами trackBar2, ..., trackBar5, причем для всех этих компонентов значения свойств будут совпадать со значениями соответствующих свойств компонента trackBar1 (заметим, что подобное копирование компонентов можно выполнять и с помощью контекстного меню формы). Расположите все компоненты сверху вниз (рис.1).

Для компонента trackBar1 дополнительно установите свойство Value равным 255 (у остальных компонентов TrackBar это свойство должно остаться равным 0).

После этого разместите в форме пять меток (label1, ..., label5) и установите их свойства Text равными соответственно Alpha, Red, Green, Blue, Gray.

Метки надо выровнять по середине соответствующих компонентов TrackBar (см. рис.1). Для этого удобно использовать дополнительное средство: панель выравнивания Layout, которую можно отобразить на экране с помощью команды меню View | Toolbars | Layout. Для выполнения выравнивания следует вначале выделить один из компонентов TrackBar, а затем, при нажатой клавише <Shift> или

<Ctrl>, — соответствующую ему метку, после чего нажать кнопку Align Middles на панели выравнивания. Порядок выделения компонентов важен, поскольку выравнивание производится по текущему компоненту, который надо выделить первым (маркеры текущего компонента имеют белый цвет).

Наконец, разместите в нижней части формы компонент-контейнер типа Panel (он получит имя panel1) и в этот компонент поместите еще одну метку (lаbеl6). Настройте свойства метки label6 (листинг 1; значения свойств ForeColor и BackColor можно набрать на клавиатуре, не используя вспомогательные окна выбора цвета).

Определите обработчик события Scroll для компонента trackBar1 (листинг 2), после чего свяжите созданный обработчик с событиями Scroll компонентов trackBar2 —trackBar4 (обработчик События Scroll для компонента trackBar5 будет добавлен позднее).

Для компонента panell задайте фоновый рисунок, взяв его из набора фоновых рисунков Windows. С этой целью вначале выделите компонент panel1 в форме. Затем выделите в окне Properties свойство Backgroundimage компонента panel1 и нажмите кнопку с многоточием. В появившемся окне Select Resource надо нажать кнопку Import (если кнопка недоступна, то предварительно надо выбрать переключатель Project, resource, file) и в новом окне Open выбрать файл с требуемым рисунком, после чего нажать клавишу <Enter> или кнопку Открыть. Будем считать, что выбран файл Штукатурка.bmp из каталога Windows. После выполнения описанных действий имя выбранного файла появится в списке ресурсов и будет выделено; кроме того, в правой части окна Select Resource появится изображение, взятое из этого файла. Осталось закрыть окно Select Resource, нажав кнопку ОК. В результате свойство Backgroundimage панели panеl1 получит значение Colors.Properties.Resources.Штукатурка. Кроме того, в окне проекта Solution Explorer появится новый элемент: файл Штукатурка.bmp, размещенный в разделе Resources. Следует заметить, что рисунок панели будет заслонен меткой label6, поэтому увидеть его мы пока не сможем.

Рис.1. Вид формы Form1 для проекта COLORS

Листинг 1. Настройка свойств

Formi: Text = Colors, StartPosition = CenterScreen

trackBari: LargeChange = 32, Maximum = 255, TickFrequency = 32

TickStyle = Both label6: Text = Color, AutoSize = False, Dock = Fill,

TextAlign = MiddleCenter, ForeColor = White, BackColor = Black

Листинг 2. Обработчик trackBar1.Scroll

private void trackBarl_Scroll(object sender, EventArgs e)

{label6.BackColor = Color.FromArgb(trackBar1.Value,

trackBar2.Value, trackBar3.Value, trackBar4.Value);}

Цвет фона метки label6 определяется как комбинация четырех цветовых составляющих, а именно прозрачности (Alpha) и интенсивности трех базовых цветов: красного (Red), зеленого (Green) и синего (Blue). Каждая цветовая составляющая может меняться в пределах от 0 до 255; значение 255 для составляющей Alpha соответствует полной непрозрачности. В нашей программе

значения цветовых составляющих задаются положением соответствующего компонента TrackBar (нижний компонент trackBar5 пока не используется). Поскольку панель с меткой label6 содержит фоновый рисунок, этот рисунок "просвечивает" сквозь фон метки при уровне прозрачности, отличном от 255.

Хотя дизайнер среды Visual C# обеспечивает удобные возможности по выравниванию компонентов друг относительно друга (а также относительно границ формы) в ходе простого перетаскивания компонентов по форме, в некоторых случаях панель выравнивания Layout оказывается очень полезной. В частности, с ее помощью легко выровнять выделенный компонент (или группу выделенных компонентов как одно целое) горизонтально или вертикально по центру формы, пропорционально увеличить горизонтальные или вертикальные промежутки между компонентами, установить для выделенных компонентов одинаковую ширину или высоту, изменить z-координату компонента, переместив его "вверх" или "вниз". Наконец, с помощью крайней правой кнопки на данной панели можно быстро вызвать режим Tab Order настройки порядка обхода компонентов.

Компонент TrackBar, называемый ползунком, удобно использовать в ситуациях, когда требуется задать параметр, принимающий значения целого типа из некоторого (не слишком большого) диапазона. При настройке компонента trackBar1 в нашем проекте мы установили значения следующих его свойств: LargeChange (шаг при нажатии клавиш <PgUp> и <PgDn>), Maximum (максимальное допустимое значение), TickFrequency (частота следования штрихов), Tickstyle (стиль расположения штрихов), а также value (текущее значение ползунка). Другие свойства изменять не потребовалось, так как нас устроили их значения по умолчанию. Перечислим некоторые из таких свойств: smallchange (шаг ползунка при нажатии клавиш со стрелками, по умолчанию равен 1), Minimum (минимальное допустимое значение, равное по умолчанию о) и Orientation (определяет ориентацию ползунка; по умолчанию ориентация горизонтальная: Horizontal). Заметим, что изменение ползунка на величину LargeChange выполняется не только при нажатии

клавиш <PgUp> или <PgDn>, но и при щелчке мышью слева или справа от бегунка (thumb), отмечающего текущее значение ползунка.

Компонент TrackBar имеет один недостаток: при изменении его "толщины" (т. е. вертикального размера Height в случае горизонтальной ориентации или горизонтального размера Width в случае вертикальной ориентации) не происходит центрирования элементов ползунка относительно его новых границ, а также пропорционального изменения размеров бегунка (заметим, что толщину ползунка можно изменить только при значении свойства Autosize, равном False). Это делает невозможным использование ползунков небольшого размера.

Если толщина ползунка, установленная по умолчанию, является неподходящей, то можно использовать альтернативные компоненты с аналогичными свойствами: горизонтальную (HScrollBar) и вертикальную (VScrollBar) полосы прокрутки. При этом, однако, следует иметь в виду два важных обстоятельства.

Во-первых, по умолчанию полоса прокрутки не может принимать фокус (даже при щелчке на ней мышью). Если такое поведение является нежелательным, то следует установить значение ее свойства Tabstop равным True.

Во-вторых, максимальное значение, которое может принимать свойство Value полосы прокрутки, равно Maximum - LargeScroll + 1, Т. е. может быть меньше, чем Maximum. Подобное странное, на первый взгляд, поведение оказывается на самом деле вполне естественным, если принять во внимание тот факт, что значение LargeScroll для полосы прокрутки определяет не только шаг при нажатии клавиши <PgUp> или <PgDn>. но и размер (ширину) бегунка относительно всей полосы прокрутки, а значение value соответствует позиции границы бегунка (точнее, левой границы для горизонтальной полосы прокрутки и верхней границы для вертикальной). Поэтому если, к примеру, свойство Minimum равно 1, свойство Maximum равно 0, a LargeScroll равно 5, то бегунок будет иметь ширину, лишь в два раза меньшую ширины области прокрутки, и, значит, при его перемещении до упора

вправо (или вниз для вертикальной полосы) его левая (соответственно, верхняя) граница будет располагаться лишь на уровне значения 6 — это значение и будет максимально возможным значением свойства value (см. приведенную выше формулу). Отметим, что подобное поведение хорошо подходит для листания текстовой информации с помощью вертикальной полосы прокрутки, если считать, что значение value соответствует номеру верхней строки текста, отображаемой на экране (так, в приведенном выше примере при value = 6 на экране будут отображаться последние 5 строк текста — с 6 по 10 — и дальнейшее листание вниз уже не потребуется).

Если бы полосы прокрутки использовались в нашем примере, то для обеспечения диапазона значений 0 — 255 для свойства value при сохранении значения LargeScroll, равного 32, необходимо было бы установить свойство Maximum равным 286 (т. е. 255 + LargeScroll - 1). Разумеется, все подобные проблемы снимаются, если положить LargeScroll равным 1, однако в этом случае теряется возможность перебора значений с большим шагом (например, клавишами <PgUp> и <PgDn>).

Завершая краткий обзор особенностей полос прокрутки, отметим, что с помощью обработчика их события Scroll можно очень гибко реагировать на любые действия пользователя, связанные с полосой прокрутки (позволяя, например, не обрабатывать каждое изменение значения value, если пользователь перетаскивает бегунок с помощью мыши, а отреагировать только на финальное значение value в момент отпускания бегунка). Событие Scroll компонента TrackBar подобными возможностями не обладает.