Панели инструментов Хотя меню прекрасно справляются с задачей предоставления доступа ко всему многообразию функциональных возможностей приложения, размещение некоторых пунктов не только в меню, но и на панели инструментов, может дать некоторые выгоды. Это оказывается справедливым для пунктов меню, используемых пользо- вателем наиболее часто, например, Open и Save. Панель ведет к отдельным функ- циональным возможностям приложения посредством одного щелчка мышью, что, вне всякого сомнения, требует меньших усилий, чем при работе с меню — поль- зователю намного легче щелкать мышью на постоянно видимой кнопке, чем осу- ществлять поиск по иерархии различных меню. Изображение экрана, приведенное ниже, демонстрирует набор линеек инстру- ментов, которые видны автору в процессе написания этой главы в MS Word: • ц 100% mentText * BaskerviPe BE Regu v ID - 5 В / -ЯГ. & : Л Кнопки, расположенные на панели инструментов, обычно содержат рисунок без текста, хотя и существует возможность использовать кнопки, на которых будет изображено и то, и другое. В качестве панели с кнопками без текста можно приве- сти панели в MS Word (как на рисунке), а в качестве примера панелей с текстом — используемые в MS Internet Explorer. Если вы наведете курсор мыши на какую- либо кнопку и остановите его, то будет выведено некоторое пояснение относитель- но предназначения данной кнопки, особенно в тех случаях, когда на ней имеется только изображение и отсутствует какой-либо текст. Дополнительные возможности Windows Form 357 В отличие от управляющих элементов типа "меню", управляющий элемент Toolbar не является просто контейнером для других объектов. Можно задать непо- средственно некоторые его свойства, например, координаты его расположения на экране. Все кнопки на панели инструментов являются полноправными объектами. Каждая кнопка элемента Toolbar представляет собой объект TooibarButton, в ко- тором содержится информация о том, какой должен выводиться рисунок, каков стиль текста, который выводится/не выводится вместе с рисунком, а также неко- торые другие пояснения. Сначала опишем свойства и события управляющего элемента Toolbar, а затем перейдем К Обсуждению TooibarButton. Свойства управляющего элемента Toolbar Свойства элемента Toolbar позволяют управлять тем, как и где этот элемент будет выводиться на экран. Они также регулируют некоторые установки, касаю- щиеся вывода кнопок управляющего элемента на экран; такие установки являются едиными для всех кнопок, содержащихся на данной панели: Имя Режим доступа Описание Appearance AutoSize Buttons ButtonSize Divider DropDownArrows ImageList ShowToolTips Wrappable Чтение/запись Управляет внешним видом всех кнопок, содержащихся в данном элементе. Оно может принимать значения либо Flat (плоский), либо Normal (нормальный). Установка, имеющая значение Normal означает, что вокруг кнопки будет нарисована объемная граница. Чтение/запись Присваивание этому свойству значения f a l s e позволяет изменять размеры управляющего элемента. При значении по умолчанию t r u e элемент самостоятельно определяет собственные размеры с тем, чтобы было достаточно места для вывода рисунков и текста. Только чтение Возвращает семейство кнопок, содержащихся в данном элементе. Чтение/запись Позволяет изменять размеры самих кнопок. Если свойство AutoSize имеет значение, равное true, то данное свойство игнорируется. Чтение/запись Если этому свойству присвоено значение t r u e , то будет выведена верхняя граница управляющего элемента Toolbar. Чтение/запись Если в управляющем элементе имеются кнопки, которые представляют раскрывающиеся меню, то это свойство позволяет определить, будет ли стрелка, предназначенная для раскрытия этого меню, рисоваться с правой стороны. Чтение/запись Список рисунков, в котором хранятся рисунки, используемые кнопками данного управляющего элемента. Чтение/запись Присваивание этому свойству значения t r u e приведет к выводу пояснений для всех кнопок, содержащихся в данном управляющем элементе. Чтение/запись Если это свойство имеет значение true, а длина панели инструментов слишком велика для того, чтобы все входящие в нее кнопки могли быть выведены на одной строке, то она будет перенесена на следующую строку. 358 Глава 14 Имя События управляющего элемента Toolbar В классе Toolbar существуют два события, не являющиеся производными от класса control. Они генерируются, когда происходит щелчок мышью на кнопке или на стрелке, предназначенной для раскрытия меню. Единственный обработчик событий должен справляться с нажатиями всех возможных кнопок на панели, поэтому он должен быть способным различать нажатие одной кнопки от нажатия другой: Описание ButtonClick Происходит при нажатии любой кнопки, входящей в состав панели инструментов. Для того чтобы определить, какая именно кнопка была нажата, следует воспользоваться свойством Button параметра ToolbarButtonClickEventArgs, который передается обработчику событий. С помощью этого свойства можно определять действия, которые необходимо предпринять. ButtonDropDown Наступает, если кнопке панели инструментов вместе со ее свойством style присваивается значение DropDownButton или если происходит щелчок мышью на соответствующей стрелке. В этом случае также возможно использовать ToolbarButtonClickEventArgs для определения того, какая именно кнопка нажата и, следовательно, какие действия требуется предпринять. Свойства класса ToolbarButton Класс ToolbarButton определяет отдельные установки для каждой кнопки пане- ли инструментов, включая рисунок, стиль, текст и пояснение по использованию данного инструмента. Интересная особенность ToolbarButton заключается в том, что если стиль имеет значение DropDownButton, то этот класс может содержать меню (Menuitem), в котором содержатся пункты, подлежащие выводу: Имя Режим доступа Описание DropDownMenu Enabled Imagelndex PartialPush Pushed Чтение/запись Дает возможность присваивать Menuitem данной кнопке. Если свойство Style этой кнопки имеет значение DropDownButton (см. ниже), то при нажатии данной кнопки будет выводиться Menuitem. Чтение/запись Установив значение этого свойства false, можно сделать данную кнопку недоступной для пользователя. Не забудьте, что в этом случае при использовании для кнопки растровых изображений рисунки можно выводить только в монохромном изображении. Чтение/запись Индекс рисунка, который следует использовать. Список рисунков привязывается к управляющему элементу Toolbar. Чтение/запись Может использоваться, если стиль данной кнопки определен как ToggleButton. Если присвоить этому свойству значение true, то кнопка будет выводиться серым цветом. В отличие от случая, когда свойству Enabled присваивается значение false, эта установка приводит к тому, что вся поверхность кнопки становится нечеткой. Чтение/запись Если стиль ToolbarButton имеет значение ToggleButton, то присвоив этому свойству значение true, можно добиться того, что кнопка будет выводиться нажатой. Дополнительные возможности Windows Form 359 Продолжение таблицы Имя Режим доступа Описание Style Text ToolTipText Чтение/запись Можно использовать четыре различных стиля: • PushButton: Кнопка выводится в нормальном виде. • ToggleButton: Кнопка данного стиля может быть нажата и будет оставаться в таком положении до тех пор, пока не будет нажата еще раз. Пример такой кнопки — кнопка Bold, использующаяся в панелях инструментов MS Word. • Separator: Кнопка данного стиля вообще не выводится; она создает небольшое пространство между кнопками. • DropDownButton: Кнопке с таким стилем может быть присвоено Menu i t em. Если в нем содержатся подпункты, они будут использоваться для создания меню, которое будет раскрываться при нажатии на данную кнопку. Чтение/запись Текст, который должен выводиться на кнопке, находящейся на панели инструментов. Чтение/запись Текст пояснения для данной кнопки. Практикум: пример использования панели инструментов Мы расширим тот пример, который использовался при обсуждении меню, за счет включения в него панели инструментов. Эта простая панель инструментов будет содержать три кнопки, каждая из которых соответствует одному пункту кон- текстного меню — выделение жирным шрифтом, курсивом и подчеркиванием. Мы включим туда четвертую кнопку с раскрывающимся меню, с помощью которой можно выбирать шрифт. Автору не удалось найти растровый файл для кнопки Font среди графических файлов, инсталлированных в Visual Studio.NET. Вы можете использовать для этой цели произвольный графический файл, либо скачать текст этой книги, который находится на www.wrox.com и в котором можно найти файл, использованный автором. Начнем с того, что внесем следующие изменения в код MenuExampie, который мы создали в начале главы: 1. Поскольку мы собираемся добавлять панель инструментов, необходимо изменить свойство Dock управляющего элемента RichTextbox на None, а ВМеСТО него ПРИСВОИТЬ СВОЙСТВУ Anchor значение Left, тор, Right, Bottom. 2. Добавьте управляющие Элементы ImageList И еще ОДНО MainMenu в форму с помощью двойного щелчка мышью на соответствующих элементах в окошке инструментов. Назовите их imageListTooibar и MainMenuFonts соответственно. В элементе ImageList будут храниться рисунки, которые мы будем использовать для кнопок, а в MainMenu — меню, которое будет использовано в качестве раскрывающегося списка. 3. Добавьте три пункта Menuitem в управляющий элемент MainMenuFonts и присвойте свойствам значения, согласно таблице слева. Имя menultemFonts menuItemMS menultemTimes Текст MS Sans Serif Times New Roman 360 Глава 14 4. Добавьте в imageList четыре рисунка, щелкнув мышью на кнопке, расположенной справа от свойства images в управляющем элементе imageList. Три из этих рисунков могут быть найдены в поддиректории Common7 той директории, в которой вы инсталлировали Visual Studio: <Директория, содержащая y5f.i\ZET>\Common7\Graphics\bitmaps\Tlbr_W95 под именами BLD.BMP, ITL.BMP И UNDRLN.BMP. Для последнего пункта меню можно использовать произвольный рисунок, например, содержащийся в исходной программе на сайте издательства Wrox и используемый в данной книге (Font.bmp). 5. Щелкните два раза мышью на управляющем элементе Toolbar в окне инструментов и добавьте ее к форме. Назовите его tooibarFonts. Эта панель инструментов может частично заслонить RichTextbox. Для исправления данной ситуации щелкните мышью на RichTextbox и переместите его ниже панели инструментов. 6. Присвойте свойству imageList панели инструментов значение ImageListToolbar. 7. Выберите СВОЙСТВО Button управляющего элемента Toolbar и щелкните на кнопке, расположенной справа от него, ЧТО ПОЗВОЛИТ Добавить КНОПКИ К Элементу Toolbar. 8. Добавьте к панели инструментов пять кнопок и очистите свойство Text у каждой из них. Присвойте свойствам этих пяти кнопок значения в соответствии с приведенной ниже таблицей: ToolbarButton Свойства Первая кнопка Name = toolBarButtonBold Imagelndex = индекс рисунка, обозначающего жирный шрифт (В) Style - ToggleButton Вторая кнопка Name = toolBarButtonltalic Imagelndex = индекс рисунка, обозначающего курсив (I) Style = ToggleButton Третья кнопка Name • toolBarButtonUnderline Imagelndex = индекс рисунка, обозначающего подчеркивание (U) Style = ToggleButton Четвертая кнопка Name = toolBarButtonSeparator Style = Separator Пятая кнопка Name = toolBarButtonFonts imagelndex = индекс последнего оставшегося рисунка Style = DropDownButton DropDownMenu = menuItemFonts Дополнительные возможности Windows Form 361 Теперь форма должна выглядеть приблизи- тельно так, как показано на рисунке слева. Заметьте, что этот проект является частью кода для настоящей книги, его можно загрузить в виде проекта Visual Studio.NET С именем Toolbars. Добавление обработчиков событий Теперь можно добавить обработчик события Buttonciick элемента Toolbar, для чего доста- точно дважды щелкнуть мышью на управляю- щем элементе: private void toolBarFontsJButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) Font newFont; //Переключение на индекс соответствующей кнопки в семействе Buttons // управляющего элемента Toolbar switch (toolBarFonts.Buttons.IndexOf(r.Button)) case 0: // Жирный шрифт if (e.Button.Pushed) // Создание нового шрифта с выделением жирным шрифтом newFont•.=• new Font (rtfText.SelectionFont, rtfText.SelectionFont.Style I FontStyle.Bold); else //Создание нового шрифта без выделения жирным шрифтом newFont = new Font(rtfText.SelectionFont, rtfText.SelectionFont.Style & -FontStyle.Bold); rtfText.SelectionFont = newFont; break; easel: //Курсив if (e.Button.Pushed) /1 Создание нового шрифта с выделением курсивом newFont = new Font(rtfText.SelectionFont, rtfText.SelectionFont.Style I FontStyle.Italic); • ;• , : • • e l s e ••;•;,•:'•. '•••,'•-'•'•. '• •' : ••••/•/• Создание нового шрифта без выделения курсивом newFont = new Font(rtfText.SelectionFont, rtfText.SelectionFont.Style & -FontStyle.Italic); rtfText.SelectionFont = newFont; break; case 2: //Подчеркивание if (e.Button.Pushed) // Создание нового шрифта с подчеркиванием newFont = new Font(rtfText.SelectionFont, rtfText.SelectionFont.Style 1 FontStyle.Underline); else // Создание нового шрифта без подчеркивания newFont = new Font(rtfText.SelectionFont, rtfText.SelectionFont.Style & -FontStyle.Underline); rtfText,SelectionFont = newFont; break; • '•' . . ;• ; : : : . •-.••'.•• \ \':-~':',:\- /_ •' • ; V • • • , • ' ' ' ' , : 362 Глава 14 В этой функции мы сначала определяем индекс той кнопки, которая была нажата. Это необходимо, поскольку все кнопки семейства Buttons элемента Toolbar ис- пользуют данное событие для оповещения о нажатии. После того, как та кнопка, которая была нажата, определена, проверяем ее свойство Pushed, для того чтобы понять, следует ли установить или удалить выбранный стиль шрифта, и в соответ- ствии с этой информацией создаем новый стиль. В завершение присваиваем новый шрифт СВОЙСТВУ SelectionFont управляющего Элемента rtfText. Последний момент, касающийся тех экземпляров класса TooibarButton, кото- рые управляют стилем шрифта, заключается в том, что они должны правильно отражать шрифт, используемый для текущего выделения. С этой целью в управля- ющий элемент RichTextbox следует добавить событие Selectionchanged. Сначала мы подписываемся на это событие в конструкторе: public Forml () { InitializeComponent(); this.menuItemFiles.Popup += new EventHandler(this.menuItemFiles_Popup); this.rtfText.SelectionChanged += new EventHandler(this.rtfText_SelectionChanged); } Затем мы добавляем собственно обработчик событий: private void rtfText_SelectionChanged(object sender, System.EventArcs e) { / /: Корректная установка кнопок на панели инструментов в нажатом // или ненажатом состояние this.toolBarButtonBold.Pushed = rtfText.SelectionFont.Bold; this.toolBarButtonltalic.Pushed = rtfText.SelectionFont.Italic; this.toolBarButtonUnderline.Pushed = rtfText.SelectionFont.Underline; : ) i • -.. •.. ••: • ' • V * . ' ' S • •. v Элемент RichTextbox позволяет получать информацию о стиле текущего шрифта, ПОЭТОМУ МЫ ПрОСТО ПРИСВОИМ СООТВеТСТВуЮЩИе Значения СВОЙСТВУ Enabled ДЛЯ кнопок на панели инструментов. Все, что теперь осталось сделать,— это обработать событие "щелчок мышью" для двух пунктов меню в кнопке типа DropDownButton. Для этого добавим события click в пункты меню — точно так же, как делали в примере использования меню, приведенном выше в этой главе (двойным щелчком мыши на соответствующем пункте): private void menuItemMS_Click(object sender, System.EventArgs e) // Создание нового шрифта, на основе требуемого семейства шрифтов. Font newFont = new Font("MS Sans Serif", rtfText.SelectionFont.Size, rtfText.SelectionFont.Style); rtfText.SelectionFont = newFont; ^ ' : ; > • V V.:.-,V,; private void menuItemTimes_Click(object sender, System.EventArgs e) { it Создание нового шрифта на основе требуемого семейства шрифтов. Font newFont = new Font("Times New Roman*, rtfText.SelectionFont.Size, rtfText.SelectionFont.Style); rtfText.SelectionFont = newFont; } Мы создаем новый шрифт из того семейства шрифтов, который мы хотим исполь- зовать, а затем присваиваем свойство SelectionFont вновь созданному шрифту. Дополнительные возможности Windows Form 363 oimi Files В Tins text is bold J?ji5 text»italic Tlw'text | jr | д ( А ?<•*? is bokt italic We used tbs toolbar to cbang» Если вы используете версию Visual Studio.NET Beta 2, то при попытке откомпилировать данный пример, вы увидите несколько предупреждений. Это не является следствием каких-либо действий с вашей стороны, скорее, это следствие действий со стороны компании Microsoft. Дело в том, что код, генерируемый для экземпляров TooibarButton, включает в себя строку, в которой происходит присваивание свойства itemData. Компания Microsoft пометила это свойство как устаревшее, которое должно быть удалено когда-нибудь в будущем. В предупреждениях содержится совет использовать вместо него свойство Tag. Не стоит беспокоиться и. удалять соответствующие строка — редактор все равно вернет их на место, как только вы откроете окно разработки. Теперь откомпилируйте и запустите приложение (см. рис. слева), а затем по- пытайтесь выполнить в нем какие-либо действия.
|