ПОНЯТНО О Visual Basic NET (том 3)

       

Панель инструментов Toolbar


Все вы видели панели инструментов. Они имеются в большинстве солидных приложений Windows. Так, панели инструментов VS вы можете видеть в 4.5. Панель инструментов представляет набор кнопок и других элементов, предназначенный для быстрого выполнения наиболее часто встречающихся действий, таких как открытие, сохранение файлов, выбор размера шрифта и т.п. Те же самые действия обычно можно выполнить и при помощи меню, но панель инструментов всегда на виду, поэтому с ее помощью действия выполняются быстрее.

Создаем панель инструментов. Поставим задачу создать панель инструментов на 4 кнопки (см. Рис. 20.8).

Рис. 20.8

На Рис. 20.9 вы видите ту же панель с некоторыми кнопками уже нажатыми.

Рис. 20.9

Создайте проект. Поместите на форму элемент управления ToolBar

(Панель инструментов). Он получит имя ToolBar1. При этом панель инструментов сразу «прилипнет» к верхнему краю формы, как ей в общем-то и положено. Пока панель пуста. Давайте заполним ее кнопками.

Чтобы кнопки не были простыми прямоугольниками, а имели вид разных красивых значков, нам в проекте необходим ImageList с картинками этих значков. Поместите ImageList в проект, а походящие иконки найдете по адресу

Program Files\Microsoft Visual Studio .NET\Common7\Graphics\icons

Далее нам нужно сказать панели инструментов, из какого именно элемента ImageList она должна брать картинки. Ведь элементов ImageList в проекте может быть несколько. Для этого заглянем в окно свойств элемента ToolBar1 и установим соответствующим образом свойство ImageList.

А теперь нас интересует свойство Buttons. Оно представляет собой коллекцию кнопок, содержащихся в панели инструментов. Щелкните по трем точкам в поле значения этого свойства. Возникнет Редактор коллекции кнопок (на Рис. 20.10 вы видите его уже заполненным несколькими кнопками). Пока же он пустой.



Рис. 20.10

Заполним его кнопками. Процесс аналогичен работе с Редактором коллекции картинок (20.5). Нажимая кнопку Add, мы добавляем на панель кнопку за кнопкой. Слева от кнопки вы видите ее номер в коллекции Buttons. В правой части окна Редактора – информация о выделенной кнопке, причем ее можно задавать. Две кнопки со стрелками вверх и вниз перемещают выделенную кнопку внутри коллекции. Кнопка Remove удаляет ее.


Настраиваем кнопки. Вот какую информацию о выделенной кнопке можно задавать и изменять в полях правой части окна Редактора (остановлюсь на главных с моей точки зрения полях):

Прежде всего, это имя кнопки (Name). Называйте кнопку в соответствии с ее предназначением, как вы его понимаете.

В поле Style нам нужно выбрать тип кнопки. Кнопки на панели инструментов могут быть трех типов и еще одного:

Тип

Описание

PushButton

Обычная кнопка. У нас это две левые кнопки.

ToggleButton

Кнопка-переключатель. Когда на нее нажмешь, она переходит в нажатое состояние до следующего нажатия. В Microsoft Word это кнопки выравнивания абзаца и форматирования шрифта. У нас это кнопка со снежинкой.

DropDownButton

Справа от нее – черная треугольная стрелка. При нажатии на стрелку выпадает меню. У нас это кнопка со светофором.

Separator

Это, собственно, не кнопка, а разделитель. У нас это серенькая вертикальная черточка слева от кнопки со снежинкой. Нажимать на разделитель нельзя, он нужен только для того, чтобы создать пространственный промежуток между кнопками. Используется для пространственной группировки кнопок по смыслу.

Таким образом, у нас на панели пять кнопок, включая разделитель. Все они перечислены в порядке слева-направо в списке Members в левой части окна Редактора.

В поле ImageIndex мы выбираем для каждой кнопки картинку из заранее подготовленной галереи ImageList.

Полезно заполнить поле ToolTipText, в этом случае при подведении мыши к кнопке будет всплывать подсказка. 

Если вы заполните текстом поле Text, этот текст будет присутствовать на кнопке рядом с картинкой.

Если кнопка имеет тип DropDownButton, то вы, конечно, хотите, чтобы из нее выпадало меню. Меню это создается привычным вам элементом управления ContextMenu. Поместите его в проект, настройте и запрограммируйте нужным вам образом (см. 18.9). Затем привяжите его к кнопке, установив значение поля DropDownMenu (см. Рис. 20.10).

Если кнопка имеет тип ToggleButton, то вы можете задать, чтобы при запуске проекта она была нажатой, установив поле Pushed в True.



Настраиваем панель инструментов. Упомяну еще о трех свойствах элемента управления ToolBar:

Свойство

Описание

Appearance

Внешний вид кнопок. Может быть таким, как на Рис. 20.8. Это вид плоский (Flat). Кнопки плоские, без границ, видны одни значки. Разделитель – вертикальная черточка. Внешний вид может быть и нормальным (Normal). В этом случае кнопки имеют привычный вид, разделитель – просто пустой промежуток.

Dock

Определяет, к какому краю формы будет «приклеена» панель инструментов и будет ли «приклеена» вообще.

TextAlign

Где находится на кнопке текст по отношению к значку – под значком или справа.

Программируем панель инструментов. Действия, которые производит нажатие на кнопки панели, как и у обычных кнопок, определяются в коде программы.

Придумаем дела для наших кнопок. Для иллюстрации вполне достаточно, если каждая кнопка будет просто сообщать о своем нажатии оператором Debug.WriteLine. Ведь вы всегда сможете на место этого оператора подставить обращение к любой самой сложной процедуре.

Снежинке придумаем дополнительное дело: пусть она управляет значением булевской переменной Снег_идет. Если кнопка нажата, эта переменная должна иметь значение True, если отжата – False.

А вот дополнительное дело для светофора: пусть выпадающее меню из 3 пунктов позволяет красить форму в цвета светофора.

Важное отличие программирования кнопок панели от программирования обычных кнопок состоит в том, что процедура обработки нажатия на кнопки панели одна для всех кнопок, а у обычных кнопок, как вы знаете, для каждой кнопки своя процедура.

Сделаем двойной щелчок по панели инструментов. Появится заготовка нужной процедуры ToolBar1_ButtonClick . А вот и вся программа:

Dim Снег_идет As Boolean = False

Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object,  _

ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick

        If e.Button Is

кнопка_Открыть Then Debug.WriteLine("Нажата кнопка Открыть")



        If e.Button Is

кнопка_Сохранить     Then Debug.WriteLine("Нажата кнопка Сохранить")

        If e.Button Is

кнопка_Снег        Then Debug.WriteLine("Нажата кнопка Снег")                                      : Переключаем_снег()

        If e.Button Is

кнопка_Светофор     Then Debug.WriteLine("Нажата кнопка Светофор")

End Sub

Sub Переключаем_снег()

        Снег_идет = Not Снег_идет

        Debug.WriteLine(Снег_идет)

End Sub

Private Sub MenuItem_красный_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _

Handles MenuItem_красный.Click

        Me.BackColor = Color.Red

End Sub

Private Sub MenuItem_желтый_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _

Handles MenuItem_желтый.Click

        Me.BackColor = Color.Yellow

End Sub

Private Sub MenuItem_зеленый_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _

Handles MenuItem_зеленый.Click

        Me.BackColor = Color.Green

End Sub

Пояснения: Объект e, являющийся параметром процедуры ToolBar1_ButtonClick, хранит в своем свойстве Button указание на то, какая именно кнопка на панели была нажата. Слово Is можно перевести, как «является». Поэтому фрагмент

        If   e.Button   Is   кнопка_Открыть    Then

можно перевести как «Если нажатая кнопка является кнопкой Открыть, то …».

Слово Is мы раньше использовали в операторе Select Case. Там его смысл был похожим на только что использованный.

Оператор

        Снег_идет = Not Снег_идет

занимается исключительно тем, что меняет значение переменной Снег_идет на противоположное.

Обратите внимание, что нажатие на собственно кнопку со светофором, не приводит к появлению меню. Для этого нужно нажать на черную треугольную стрелку.

Улучшаем калькулятор. Последнее, чем созданный нами ранее калькулятор хуже стандартного – у него нет 10 цифровых клавиш, нажимая на которые мы набираем числа в текстовом поле. В принципе, мы уже давно могли разместить 10 кнопок на калькуляторе, написав к каждой кнопке коротенькую процедуру обработки нажатия на кнопку. Но 10 процедур – пожалуй, слишком громоздко. Сейчас у нас появился шанс обойтись одной процедурой, разместив 10 кнопок на панели инструментов. Подумайте, как это сделать. Вам не придется писать 10 операторов If, если вы обратитесь к номеру нажатой кнопки в коллекции:

ToolBar1.Buttons.IndexOf(e.Button))

Наращивать число в текстовом поле можно так:

TextBox1.Text = TextBox1.Text & Нажатая_цифра


Содержание раздела