Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие 9. Создание меню.doc
Скачиваний:
1
Добавлен:
19.11.2019
Размер:
5.42 Mб
Скачать

Занятие 9

Создание и настройка меню

По окончании данного занятия вы сможете:

  • Создать и настроить компонент MenuStrip в форме.

  • Программно изменить отображаемую структуру меню

  • Создать и настроить компонент ContextMenuStrip в форме

Обзор элемента управления MenuStrip

В сущности, элемент управления MenuStrip это ToolStrip, оптимизированный для отображения объектов ToolStripMenuItem. MenuStrip наследуется от ToolStrip и может содержать все элементы панели инструментов, описанные на предыдущем занятии. Однако первичное предназначение этого элемента управления заключается в отображении объектов ToolStripMenuItem.

Объекты ToolStripMenuItem являются элементами управления, обеспечивающими визуальное представление для элемента меню. Они могут выглядеть в виде текста или изображения либо и того, и другого, а код, который содержится в обработчиках события ToolStripMenuItem.Click, будет выполняться при щелчке мыши. Каждый из элементов управления ToolStripMenuItem может содержать свой собственный набор настроек, что позволяет создавать вложенные меню.

Элемент управления MenuStrip предоставляет большое количество свойств, влияющих на поведение элементов управления ToolStripMenuItem, которые он содержит. Основные свойства элемента управления MenuStrip приведены в табл. 9-1.

Заметьте, что свойства этого элемента управления и ToolStrip очень похожи. Из-за того что MenuStrip наследуется от ToolStrip, он предоставляет большую часть тех же свойств и инкапсулирует ту же функциональность

Табл.9-1. Основные свойства элементов управления MenuStrip

Свойство

Описание

AllowMerge

Указывает, можно ли этот элемент управления объединять с другим

Dock

Указывает, каким образом крепится панель инструментов. Несмотря на то, что элементы управления ToolStrip могут быть любого вида, чаще всего они крепятся к одному из краев формы

LayoutStyle

Определяет расположение элементов управления в панели инструмен­тов. В случае значения HorizontalStackWithOverFlow элементы располага­ются горизонтально и при необходимости помещаются в меню перепол­нения. VerticalStackWithOverFlow располагает элементы вертикально и может помещать их в меню переполнения. StackWithOverflow определяет модель расположения, соответствующую свойству Dock панели инстру­ментов. Значение Flow позволяет элементам размещаться горизонтально или вертикально, a Table располагает все элементы по левому краю

RenderMode

Определяет, как визуализируются элементы панели инструментов. Sys­tem использует настройки системы, Professional указывает внешний вид типа Microsoft Office, a ManagerRenderMode задает настройки автомати­чески

ShowItemToolTips

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

Stretch

Если элемент управления находится в ToolStripContainer, показывает, растянется ли панель инструментов во всю длину TbolStripPanel

TextDirection

Указывает направление текста в элементе управления, который содержит панель инструментов

Элементы управления ToolStripMenuItem обеспечивают всю функциональность, которая требуется от элементов меню. В табл. 9-2 описаны основные свойства эле­мента управления ToolStripMenuItem.

Табл. 9-2. Основные свойства элемента управления ToolStripMenuItem

Свойство

Описание

AutoSize

Определяет, может ли размер элемента меню автоматически подстраиваться под размер текста

Checked

Указывает, будет ли отображаться флажок в элементе меню

CheckOnClick

Указывает, будет ли появляться флажок в элементе меню при щелчке мышью

CheckState

Возвращает CheckState элемента меню. CheckState может быть Checked, Unchecked или Indeterminate

DisplayStyle

Определяет, как будет отображаться элемент меню. Значение None не придает никакого визуального эффекта, значение Text отображает на элементе меню только текст, Image — только изображение и, наконец, присвоение свойству значения ImageAndText приведет к отображению изображения рядом с текстом

DoubleClickEnabled

Указывает, будет ли происходить событие DoubleClick

DropDownItems

Содержит коллекцию элементов панели инструментов (обыч­но элементов меню, но не обязательно), которые отображаются в раскрывающемся списке при выборе элемента меню

Enabled

Определяет активность элемента меню

Image

Устанавливает изображение, которое будет использоваться для этого элемента меню

MergeAction

Указывает, какое действие предпримет этот элемент меню при объединении меню

Mergelndex

Указывает порядок расположения элементов в образованном меню после объединения двух других

ShortcutKeyDisplayString

Устанавливает пользовательскую строку для клавиши быст­рого доступа, которая отображается рядом с элементом меню Если клавиши быстрого доступа активны, а это свойство не ус­тановлено, то отображается действующая комбинация клавиш

ShortcutKeys

Определяет клавиши, которые будут выступать в роли быстрой комбинации для выполнения команды меню

ShowShortcutKeys

Указывает, активны ли клавиши быстрого доступа

Text

Возвращает или устанавливает текст, который отображается в элементе меню

Textlmage Relation

Определяет совместное размещение текста и изображения, когда свойству Display Style присвоено значение ImageAndText

Создание элементов управления MenuStrip и ToolStripMenultems

Вы можете создать MenuStrip во время разработки так же, как и любой другой эле­мент управления, перетащив его из Toolbox на поверхность конструктора. Появится интерфейс, где можно создать элемент меню путем ввода строки в поле элемента управления MenuStrip. При этом отображаются дополнительные поля справа и снизу для создания дополнительных элементов или подэлементов только что созданного эле­мента меню. Интерфейс исчезнет, если перенести фокус в другое место конструктора, но при щелчке элемента меню появится снова. Элемент управления ToolStripMenuItem изображен на рис. 9‑1.

Рис. 9-1 Интерфейс для разработки элемента управления ToolStripMenuItem

Обратите внимание, что по умолчанию схема для именования элементов управления ToolStripMenuItem отличается от соответствующей схемы для других элементов уп­равления. Несмотря на то, что при добавлении в форму к имени таких элементов управления, как Button, добавляется число (например, Button1), перед именем меню стоит текст элемента меню. Так, если вы создали элемент меню File, то его имя по умолчанию будет FileToolStripMenuItem. Можно переименовать элемент меню, изменив его свойство Name в окне Properties.

Изменение свойств нескольких ToolStripMenuItem одновременно

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

Изменение свойства нескольких элементов меню одновременно

  1. Удерживая клавишу Ctrl, щелкните каждый элемент управления, который необ­ходимо редактировать.

  2. Сделайте соответствующие изменения в окне Properties. Внесенные изменения будут применены ко всем выбранным элементам.

Кроме того, элементы меню добавляются программным способом во время вы­полнения. Можно добавить уже существующий элемент меню (например, элемент другого меню) или же создать новый элемент и добавить его к меню. Следующий фрагмент кода демонстрирует оба этих подхода:

Метод MenuStrip.Items Add также используется для добавления нового элемента меню, даже когда нет ссылки на существующий элемент. Указав строку или изобра­жение, можно создать новый элемент меню и получить на него ссылку, как показано в следующем примере:

Таким же способом можно добавить новые или имеющиеся в наличии элементы в раскрывающееся меню уже существующего элемента меню. Это приведет к созданию новых элементов во вложенном меню. Следующий фрагмент кода демонстрирует добавление элемента меню в коллекцию DropDownltems существующего элемента программным способом

Копирование элементов меню во время разработки

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

Копирование элементов управления во время разработки

  1. В конструкторе щелкните правой кнопкой мыши элемент меню, который необхо­димо скопировать, и выберите Сору в контекстном меню.

  2. В конструкторе щелкните правой кнопкой мыши элемент меню, на месте которого должен появиться скопированный элемент, и выберите Paste в контекстном меню. Элемент меню скопирован в новое место.

Обратите внимание, что с помощью этой процедуры вы можете копировать эле­менты верхнего уровня во вложенные элементы, вложенные элементы — в элементы верхнего уровня, элементы верхнего уровня — в элементы верхнего уровня, а вло­женные элементы — во вложенные элементы.

Улучшение меню

Меню могут быть расширены различными элементами, которые облегчают пользо­вателю жизнь и делают интерфейс более практичным. В этом разделе вы узнаете, как создавать флажки, клавиши доступа, разделители и быстрые клавиши для эле­ментов меню.

Добавление флажков к элементам меню

Вы можете отобразить флажок возле любого элементам меню за исключением элемен­та верхнего уровня. Это удобно, когда необходимо указать пользователю, что опция меню выбрана или активирована. Флажок можно отобразить возле элемента меню, задав свойству Checked значение True, как показано ниже:

Свойство Checked является свойством типа Boolean, возвращающим значение, по которому можно определить, выбран ли элемент меню. Если элемент выбран, свойс­тво Checked возвратит значение True. Если же элемент находится в любом другом состоянии — свойство Checked возвратит значение False С другой стороны, свойство CheckState указывает фактическое состояние элемента меню и возвращает CheckState.Checked, CheckState.Unchecked или Checkstate.Indeterminate.

Если вы хотите, чтобы после щелчка мышью возле элемента меню отображался флажок, присвойте свойству CheckOnClick значение True. Это приведет к тому, что при каждом щелчке элемента меню флажок будет появляться или исчезать. Чтобы программно изменить или определить состояние флажка в элементе меню, можно воспользоваться свойством ToolStripMenuItem CheckState или ToolStripMenuItem.Checked.

Добавление разделителя в меню

Разделитель пригодится в том случае, когда необходимо отделить группы опции друг от друга. Разделитель можно добавить в любое вложенное меню во время разработки выбрав Separator в раскрывающемся списке интерфейса разработки элемента меню, как показано на рис. 9-2.

Помните, что добавить разделитель в меню верхнего уровня можно только программным способом, создав экземпляр элемента управления ToolStripSeparator и вста­вив его в соответствующее место в коллекции MenuStripItems, как показано ниже:

Создание клавиш доступа

Клавиши доступа позволяют получить доступ к элементам меню путем определения клавиш, нажатие которых с одновременным удерживанием клавиши Alt приведет к выполнению команды меню. Например, если в меню File клавиша F определена как клавиша доступа, то после нажатия комбинации Alt+F меню File откроется Меню, содержащие вложенные меню, откроют их при нажатии комбинации клавиш доступа, а меню, выполняющие команды, — выполнят эти команды. Обратите внимание, что использование клавиш доступа имеет смысл, только когда видны соответствующие элементы меню. Так, если вы зададите клавишу доступа для элемента меню Open, которое содержится во вложенном меню File, то сначала следует открыть меню File, чтобы клавиша доступа сработала.

Создать клавишу доступа для меню можно, поставив перед буквой, для которой вы хотите создать клавишу доступа, знак амперсанда (&). К примеру, для создания комбинации клавиш доступа Alt+F для меню File присвойте свойству Text элемента управления FileToolStripMenuItem значение &File.