Елементи інтерфейсу: Меню

Будь-який додаток створюється для реалізації комплексу функцій, що забезпечують виконання спільної справи додатку. Для швидкого доступу до всіх функцій програми служать меню: головне меню програми і контекстне меню окремих об'єктів додатку (форм, панелей).

При проектуванні меню слід керуватися певними принципами. Головний з них - стандарти. Рекомендується дотримуватися стандартних назв команд меню і їх розташування. Наприклад, пункт меню для роботи з файлами рекомендується називати в своїх додатках File (Файл), а пункт меню для виклику довідкової системи програми - Help (Довідка). При цьому пункт меню File (Файл) бажано розмістити першим, а пункт Help (Довідка) - останнім.

В процесі розробки меню бажано групувати команди меню, що реалізують функції для вирішення конкретного завдання, в одне спливаюче меню. Наприклад, всі команди меню, що стосуються роботи з таблицями, можна розташувати в меню Table (Таблиця).

Примітка

Як зразок для створення власних додатків при розробці меню та інших елементів можна використовувати, наприклад, додаток Microsoft Word.

Редактор меню Menu Editor

Для проектування меню всіх видів використовується редактор меню Menu Editor (Редактор меню). Для роботи з редактором меню на формі необхідно розташувати один з наступних елементів управління:

  • MenuStrip - елемент управління, призначений для створення головного меню програми;
  • ContextMenuStrip - елемент управління, який використовується для створення контекстного меню.

Якщо перетягнути один з цих елементів управління на форму, він відобразиться в нижній області конструктора додатку під формою, а вгорі форми під заголовком з'явиться редактор меню. Він являє собою елемент Type Here, призначений для задання пунктів меню. Під час введення тексту в пункт меню з'являються додаткові елементи Type Here знизу і праворуч (рис. 1).

Рис. 1. Створення меню

Примітка

Для швидкого введення елементів меню можна використовувати клавіші <Enter>, <Tab> і <↓>.

Для відкриття редактора меню Menu Editor (Редактор меню) в подальшому необхідно вибрати розташований під формою відповідний елемент керування меню.

Для додавання різних елементів в меню потрібно натиснути правою кнопкою миші на пункті меню і вибрати в контекстному меню пункт Insert (Додати), а потім в списку підменю що розкрився додати відповідний елемент (роздільник, пункт меню, поле редагування або випадаючий список).

Для видалення непотрібних і вставки нових пунктів меню використовуються команди Delete (Видалити) і Insert (Додати) контекстного меню редактора Menu Editor (Редактор меню).

Примітка

Переконайтеся, що для властивостей ContextMenuStrip і MainMenuStrip форми вказані імена контекстного і головного меню відповідно.

Для додавання елементів в меню можна також скористатися діалоговим вікном Items Collection Editor (Редактор списку елементів) (рис. 2), що відкривається при виборі властивості Items, розташованого на формі елементу управління MenuStrip.

Список, що розкривається Select item and add to list below (Виберіть елемент і додайте в розташований нижче список) цього діалогового вікна містить перелік можливих елементів, які можна додати на панель інструментів: пункт меню, текстове поле або список, що розкривається. За допомогою кнопки Add (Додати), розташованої праворуч від списку, здійснюється додавання нових елементів в меню.

Поле Members (Компоненти) діалогового вікна Items Collection Editor (Редактор списку елементів) містить список всіх елементів меню, а в правій частині цього вікна розташований перелік властивостей виділеного в полі Members (Компоненти) елемента.

Рис. 2. Діалогове вікно Items Collection Editor

Ім'я та текст

Для задання імен пунктів меню і самого меню служить властивість Name. Ім'я повинно бути унікальним, оскільки дозволяє ідентифікувати меню. Бажано користуватися стандартним присвоєнням імені, тобто перші три букви імені задати рівними mnu.

Щоб визначити текст, що відображається в пункті меню, призначена властивість Text. Якщо в цьому тексті перед однією з букв помістити символ &, то вона в пункті меню буде підкреслена, і клавіша цієї букви буде призначена в якості клавіші для швидкого доступу до даного пункту меню.

Примітка

Текст пункту меню можна задати за допомогою редактора меню Menu Editor (Редактор меню).

Клавіші швидкого виклику

Крім використання амперсанда (&) в тексті пункту меню для задання гарячих клавіш, які забезпечують швидкий виклик команди меню, можна використовувати властивості елементів меню ShortcutKeys і ShowShortcutKeys.

Властивість ShortcutKeys дозволяє вибрати з випадаючого списку будь-яку комбінацію клавіш для швидкого виконання команди меню. За відображення в меню роботи з програмою комбінацій клавіш швидкого виклику відповідає властивість ShowShortcutKeys. Якщо ця властивість має значення False, то клавіші швидкого виклику не відображатимуться на екрані для даного пункту меню.

Примітка

За допомогою властивості ShortcutKeyDisplayString можна задати те, що буде відображатися праворуч від найменування пункту меню в разі використання клавіш швидкого виклику. За замовчуванням це задана властивістю ShortcutKeys комбінація клавіш.

Значок для пункту меню

Для задання значка, що розміщується зліва від пункту меню, використовується властивість Image. При виборі даної властивості в правій колонці з'являється кнопка з трьома крапками, натиснувши яку відкривається діалогове вікно Select Resource (Вибрати ресурс). За допомогою цього вікна можна вибрати з наявних на комп'ютері значків відповідний.

Використання прапорців

Як правило, пункти меню служать для виконання певних функцій програми. Але іноді потрібно задати стан деякого параметра. З цією метою використовуються прапорці, для визначення параметрів яких призначені властивості Checked, CheckOnClick і CheckState.

Властивість Checked визначає, чи є галочка ліворуч від відповідного пункту меню.

Щоб можна було змінювати стан прапорця пункту меню, необхідно присвоїти значення True властивості CheckOnClick.

Крім властивості Checked, для задання стану прапорця також використовується властивість CheckState, яка може набувати значень Checked, Indeterminate і Unchecked, що відповідає встановленому, невизначеному і скинутому прапорці відповідно.

Властивості меню для MDI-інтерфейсу

Пункти меню мають також властивості, що дозволяють задавати їх поведінку в разі MDI-інтерфейсу, коли є батьківські і дочірні вікна.

За допомогою властивості MdiWindowListItem елемента управління MenuStrip можна задати пункт меню батьківського вікна, який буде містити список всіх дочірніх вікон. Цей список здатний утримувати до дев'яти вікон. Якщо таких вікон більше, то внизу меню з'являється пункт More Windows (Інші вікна), що відкриває діалогове вікно, в якому міститься повний список дочірніх вікон.

Для задання поведінки пунктів меню при об'єднанні меню батьківського і дочірнього вікон служать властивості MergerAction і MergerIndex. Щоб уникнути однакових пунктів меню або заборонити відображати деякі при об'єднанні в разі розташування головного меню дочірнього вікна в батьківському вікні, необхідно використовувати дані властивості.

Примітка

Для того щоб можна було об'єднувати меню батьківського і дочірнього вікон, необхідно властивості AllowMerge елемента управління MenuStrip привласнити значення True.

Властивість MergerAction може набувати значень, зазначені в таблиці 1.

Таблиця 1. Значення властивості MergerAction

 Значення властивості Опис 
 Insert  Пункт меню включається в об'єднане меню
 Replace  Пункт меню замінює пункт, що знаходиться в тій же позиції, що задається властивістю MergerIndex
 Remove  Пункт меню не додається в набір пунктів, які об'єднуються 
 MatchOnly  Всі пункти підменю зазначеного меню об'єднуються з пунктами підменю, що знаходиться в тій же позиції об'єднаного меню

Властивість MergerIndex задає позицію об'єднання пунктів меню. За замовчуванням ця властивість приймає значення -1. Наприклад, якщо необхідно об'єднати меню File (Файл) дочірнього і батьківського вікон, то слід поставити значення MatchOnly для властивості дочірнього вікна MergerAction.

Властивості, що визначають стан пункту меню

Властивість Visible визначає видимість на екрані пункту меню. Якщо це властивість приймає значення False, то пункт меню не видно при виконанні програми. При роботі програми за допомогою цієї властивості пункти меню можна динамічно ховати або показувати.

Якщо ж необхідно визначити можливість виконання команди (пункту) меню, але при цьому залишити її видимою для користувача, використовується властивість Enable. Якщо встановлено значення False для цієї властивості, то пункт меню виділяється сірим кольором і блокується для вибору. Таким чином, можна в залежності від контексту об'єкта команди забороняти або дозволяти виконання команди.

Контекстне меню

Контекстне меню - це меню, що пов'язане з певною дією (зазвичай, це клацання правої кнопки миші на об'єкті) і викликається в будь-якому місці програми. У початковому стані контекстне меню невидимо і візуалізується поруч з покажчиком миші після виклику. Контекстним таке меню називається тому, що воно з'являється поруч з обраним об'єктом і його склад залежить від змісту (контексту) цього об'єкта. Після вибору команди з контекстного меню воно зникає. Проектується контекстне меню аналогічно головному за допомогою Menu Editor (Редактор меню).

Приклад створення меню

Створимо меню для батьківської та дочірньої форм з попереднього прикладу проектування MDI-інтерфейсу. Для цього виконайте такі дії:

1. Перетягніть на форму батьківського вікна елемент управління MenuStrip і надайте йому ім'я mnuParent. Створіть два пункти меню верхнього рівня з ім'ям mnuFile і mnuWindow і текстом File і Window відповідно.

2. Для того щоб в меню Window відображався список відкритих дочірніх вікон, надайте значення mnuWindow властивості MdiWindowListItem елемента управління mnuParent.

3. Створіть два пункти для меню File (Файл) з наступними властивостями:

 Name  Text  ShortcutKeys
 mnuFileNew  New  <Ctrl>+<N>
 mnuFileExit  Exit  <F10>

4. Перетягніть на форму дочірнього вікна елемент управління MenuStrip і надайте його властивостям Name і Visible значення mnuChild і False відповідно. Створіть для нього аналогічний пункт меню File (Файл) і задайте для його властивості MergerAction значення MatchOnly. Додайте до цього пункту меню команду з ім'ям mnuFileClose і текстом Close File.

5. Пронумеруйте пункти меню File дочірнього і батьківського вікон в порядку їх слідування в об'єднаному меню за допомогою властивості MergerIndex.

6. Тепер створіть обробку події вибору команди New (Новий) меню File (Файл). Для цього в обробник події mnuFileNew_Click додайте наступний рядок:

        NewChildForm()

7. У обробники подій mnuFileExit_Click і mnuFileClose_Click додайте наступний рядок коду:

        Me.Close()

В результаті ви отримаєте два коди для батьківсього та дочірнього вікон відповідно:

Public Class frmParentMdi

    Private Sub NewChildForm()

        Dim f As New frmChildMdi

        f.MdiParent = Me

        f.Show()

    End Sub

 

    Private Sub mnuFileNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                                Handles mnuFileNew.Click

        NewChildForm()

    End Sub

 

    Private Sub mnuFileExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                                Handles mnuFileExit.Click

        Me.Close()

    End Sub

End Class

 

 Public Class frmChildMdi

    Private Sub mnuFileClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                                Handles mnuFileClose.Click

        Me.Close()

    End Sub

End Class

 Ваш проект матиме наступний вигляд: