Занятие 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 |
Определяет, как визуализируются элементы панели инструментов. System использует настройки системы, 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 отобразит только общие для всех элементов управления события и свойства.
Изменение свойства нескольких элементов меню одновременно
Удерживая клавишу Ctrl, щелкните каждый элемент управления, который необходимо редактировать.
Сделайте соответствующие изменения в окне Properties. Внесенные изменения будут применены ко всем выбранным элементам.
Кроме того, элементы меню добавляются программным способом во время выполнения. Можно добавить уже существующий элемент меню (например, элемент другого меню) или же создать новый элемент и добавить его к меню. Следующий фрагмент кода демонстрирует оба этих подхода:
Метод MenuStrip.Items Add также используется для добавления нового элемента меню, даже когда нет ссылки на существующий элемент. Указав строку или изображение, можно создать новый элемент меню и получить на него ссылку, как показано в следующем примере:
Таким же способом можно добавить новые или имеющиеся в наличии элементы в раскрывающееся меню уже существующего элемента меню. Это приведет к созданию новых элементов во вложенном меню. Следующий фрагмент кода демонстрирует добавление элемента меню в коллекцию DropDownltems существующего элемента программным способом
Копирование элементов меню во время разработки
Иногда вам потребуется скопировать элементы управления из одного места в другое. Например, при создании разных меню вы захотите, чтобы они имели общий набор некоторых элементов. Для этого можно просто скопировать и вставить элементы меню в конструктор.
Копирование элементов управления во время разработки
В конструкторе щелкните правой кнопкой мыши элемент меню, который необходимо скопировать, и выберите Сору в контекстном меню.
В конструкторе щелкните правой кнопкой мыши элемент меню, на месте которого должен появиться скопированный элемент, и выберите 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.