- Урок 29. Создаем горизонтальное меню
- Краткая справочная информация
- Проект «MyMenu»
- Создание меню
- Редактирование элементов меню
- Обработка выбора меню
- Создание настраиваемого меню, которое вызывает макрос
- Об участнике
- Поддержка и обратная связь
- Обратная связь
- Меню и команды
- Встроенные меню
- Контекстные меню
- См. также
- Поддержка и обратная связь
- Обратная связь
Урок 29. Создаем горизонтальное меню
Почти все программы Windows позволяют управлять ими при помощи строки меню. В наших программах пока что никакого меню не было.
На предыдущем уроке было рассказано, как работать с текстовыми файлами.
В этом уроке мы познакомимся с элементом управления MainMenu, научимся с его помощью создавать горизонтальное профессионально выглядящие меню и обрабатывать выбор пользователя в коде программы.
Краткая справочная информация
Меню расположено в строке меню и представляет собой список команд, объединенных в логические группы. Когда пользователь нажимает на названии группы, то в раскрывающемся списке появляются команды этого меню.
Большинство команд меню исполняется немедленно после нажатия, однако если команда меню оканчивается многоточием (…), Visual Basic выводит диалоговое окно, запрашивающее перед исполнением команды дополнительную информацию.
Создать горизонтальное меню и настроить его свойства можно с помощью элемента управления MainMenu.
Объект главного меню появляется не на поле формы, а под ней. В Visual Studio .NET невидимые объекты, в том числе меню и таймеры, показываются в среде разработки на отдельной панели, которая называется Областью компонентов. На этой панели их можно выделять, настраивать их свойства или удалять.
В дополнение к объекту меню, расположенному в области компонентов, создаваемое меню графически изображается в верхней части формы.
После того, как меню добавлено в форму, для обработки команд меню можно использовать процедуры обработки событий. Основное событие для элементов меню — MenuItem_Click — щелчок на элементе меню.
Проект «MyMenu»
Создадим проект, который будет иметь горизонтальное меню с названием Дата. В нем должно содержаться вложенное подменю из двух команд, показывающих текущую дату и время. Кроме меню на форме установим элемент управления Label (Надпись) для отображения выбранных даты или времени.
Создание меню
- Запустите Visual Studio, создайте новый проект с именем MyMenu.
- Выберите элемент управления MainMenu на закладке Windows Forms окна области элементов и установите на поле формы.Не беспокойтесь по поводу его расположения — Visual Studio автоматически передвинет этот элемент управления в нужное место и задаст его размер. В области компонентов появится объект MainMenu (Меню), создаваемое меню графически изображается в верхней части формы.
- Чтобы ввести название меню, нужно щелкнуть по полю Прототип для текста. После этого можно добавлять заголовки подменю и других меню, выбирая нужные поля с помощью стрелок и вписывая туда требуемые названия.Щелкните на поле Прототип для текста, введите Дата, а затем нажмите клавишу (Enter). Слово «Дата» стало названием первого меню, и появились два новых поля Прототип для текста, позволяющие создать элементы подменю (команды в меню Дата) и дополнительные меню. В данный момент выберите подменю. Если меню с формы исчезает, выберите объект MainMenu1 в области компонентов, и оно снова появится.
- Чтобы в меню Дата создать новую команду, введите слово День, а затем нажмите клавишу (Enter). Visual Studio добавит команду к меню и выделит следующий элемент подменю.
- Наберите слово Время, а затем нажмите клавишу Enter.
- Теперь у вас есть меню Дата с двумя командами меню — День и Время. Форма будет выглядеть примерно так.
- Чтобы закрыть Конструктор меню, щелкните на поле формы. Конструктор меню закроется.
- Теперь чтобы увидеть Конструктор меню и начать с ним работать, нужно щелкнуть на названии меню. В поле формы нажмите слово Дата. Меню появляется снова, с уже знакомыми полями Прототип для текста. Теперь его опять можно настраивать.
Редактирование элементов меню
- Выберите меню Дата, чтобы развернуть элементы этого меню.
- Изменить порядок элементов очень просто — нужно просто перетащить элемент на новое место в меню.Перетащите надпись Время на надпись День и отпустите клавишу мыши. Перетаскивание элемента меню поверх другого элемента означает, что вы хотите разместить его перед этим элементом. Элемент меню Время переместится на новое место перед элементом День.
- Чтобы удалить из меню ненужный элемент, щелкните на этом элементе, а затем нажмите клавишу (Delete).
Мы закончили создавать пользовательский интерфейс для меню Дата. Теперь нужно запрограммировать процедуры, соответствующие строкам меню, для обработки выбора пользователя.
Обработка выбора меню
После того, как меню и команды настроены с помощью объекта MainMenu, они также становятся объектами программы.
Чтобы заставить объекты меню выполнять осмысленную работу, необходимо написать для них процедуры обработки событий.
Добавим к форме объект надпись, показывающую результат работы команд Время и День из меню Дата.
- Добавим на форму объект надпись.В области элементов выберите элемент управления Label (Надпись), нарисуйте в центре формы надпись среднего размера. На форме появится объект Label, и в коде программы у него будет имя Label1.
- Задайте для этой надписи следующие свойства:
Объект Свойство Значение Label1 BorderStyle FixedSingle Font Font Microsoft Sans Serif, жирный , 14 пунктов Text (empty) TextAlign MiddleCenter - Ваша форма должна выглядеть примерно так.
- Теперь добавим операторы в процедуры обработки событий для обработки команд меню Время и День. Щелкните на меню Дата, чтобы его раскрыть.
- Чтобы открыть в редакторе кода процедуру обработки событий для команды Время, дважды щелкните мышью на этой команде. В редакторе кода появится процедура события MenuItem3_Click.Добавьте в процедуру следующий оператор
Оператор присваивает сегодняшнее число (по системным часам) свойству Text объекта Label1, которое показывается в виде надписи. DateString — это свойство, в котором содержится системная дата. Чтобы закончить ввод строки, нажмите клавишу со стрелкой вниз.
В этом уроке Вы создали работающую программу, в которой используются меню.
В следующем уроке Вы узнаете, как использовать меню для показа стандартных диалоговых окон.
Следующий урок: Использование элементов управления для диалоговых окон
Создание настраиваемого меню, которое вызывает макрос
В следующем примере кода показано, как создать пользовательское меню с четырьмя параметрами меню, каждое из которых вызывает макрос.
Пример кода предоставлен: издательством Holy Macro! Books, Holy Macro! It’s 2,500 Excel VBA Examples (книга «2500 примеров VBA для Excel» от Holy Macro! на английском языке)
В следующем примере кода настраивается настраиваемое меню при открытии книги и удаляется при закрытии книги.
Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) With Application.CommandBars("Worksheet Menu Bar") On Error Resume Next .Controls("&MyFunction").Delete On Error GoTo 0 End With End Sub Private Sub Workbook_Open() Dim objPopUp As CommandBarPopup Dim objBtn As CommandBarButton With Application.CommandBars("Worksheet Menu Bar") On Error Resume Next .Controls("MyFunction").Delete On Error GoTo 0 Set objPopUp = .Controls.Add( _ Type:=msoControlPopup, _ before:=.Controls.Count, _ temporary:=True) End With objPopUp.Caption = "&MyFunction" Set objBtn = objPopUp.Controls.Add With objBtn .Caption = "Formula Entry" .OnAction = "Cbm_Active_Formula" .Style = msoButtonCaption End With Set objBtn = objPopUp.Controls.Add With objBtn .Caption = "Value Entry" .OnAction = "Cbm_Active_Value" .Style = msoButtonCaption End With Set objBtn = objPopUp.Controls.Add With objBtn .Caption = "Formula Selection" .OnAction = "Cbm_Formula_Select" .Style = msoButtonCaption End With Set objBtn = objPopUp.Controls.Add With objBtn .Caption = "Value Selection" .OnAction = "Cbm_Value_Select" .Style = msoButtonCaption End With End Sub
Меню MyFunction добавляется при открытии книги и удаляется при закрытии книги. Он предоставляет четыре варианта меню с макросом, назначенным каждому параметру. Определяемая пользователем функция MyFunction умножает три значения в диапазоне и возвращает результат.
Function MyFunction(rng As Range) As Double MyFunction = rng(1) * rng(2) * rng(3) End Function
Запись формулы: Этому параметру меню назначается макрос «Cbm_Active_Formula», который вызывает определяемую пользователем функцию «MyFunction», которая умножает числа в предыдущих трех ячейках и сохраняет значение определяемой пользователем функции в активной ячейке. Необходимо иметь значения в диапазоне B6:D6 и выбрать ячейку E6, прежде чем щелкнуть этот параметр меню.
Sub Cbm_Active_Formula() 'setting up the variables. Dim intLen As Integer, strRng As String 'Using the active cell, E6. With ActiveCell 'Check to see if the preceding offset has valid data, and if there are three values If IsEmpty(.Offset(0, -1)) Or .Column < 4 Then 'If the data is not valid, call MyFunction directly as a formula, but with no parameters. .Formula = "=MyFunction()" Application.SendKeys "" Else 'If the data is valid, create a range of the preceding 3 cells strRng = Range(Cells(.Row, .Column - 3), _ Cells(.Row, .Column - 1)).Address intLen = Len(strRng) 'Call MyFunction as a formula, with the range as the parameter. .Formula = "=MyFunction(" & strRng & ")" Application.SendKeys "" End If End With End Sub
Ввод значения: Этому параметру меню назначается макрос "Cbm_Active_Value", который вводит значение, созданное UDF с именем MyFunction, в активную ячейку. Необходимо иметь значения в диапазоне B6:D6 и выбрать ячейку E6, прежде чем щелкнуть этот параметр меню.
Sub Cbm_Active_Value() 'Set up the variables. Dim intLen As Integer, strRng As String 'Using the active cell, E6. With ActiveCell 'If there isn't enough room in the column, then send a warning. If .Column < 4 Then Beep MsgBox "The function can be used only starting from column D!" 'Otherwise, call MyFunction, using the range of the previous 3 cells. Else ActiveCell.Value = MyFunction(Range(ActiveCell.Offset(0, -3), _ ActiveCell.Offset(0, -1))) End If End With End Sub
Выбор формулы: Этому параметру меню назначается макрос "Cbm_Formula_Select", который использует inputBox для пользователя, чтобы выбрать диапазон, который должен вычислить UDF MyFunction. Возвращаемое значение UDF хранится в активной ячейке.
Sub Cbm_Formula_Select() 'Set up the variables. Dim rng As Range 'Use the InputBox dialog to set the range for MyFunction, with some simple error handling. Set rng = Application.InputBox("Range:", Type:=8) If rng.Cells.Count <> 3 Then MsgBox "Length, width and height are needed -" & _ vbLf & "please select three cells!" Exit Sub End If 'Call MyFunction in the active cell, E6. ActiveCell.Formula = "=MyFunction(" & rng.Address & ")" End Sub
Выбор значения. Этому параметру меню назначается макрос "Cbm_Value_Select", в котором используется поле InputBox для выбора пользователем диапазона, который должен вычислить UDF MyFunction. Значение сохраняется непосредственно в активной ячейке, а не возвращается определяемым пользователем.
Sub Cbm_Value_Select() 'Set up the variables. Dim rng As Range 'Use the InputBox dialog to set the range for MyFunction, with some simple error handling. Set rng = Application.InputBox("Range:", Type:=8) If rng.Cells.Count <> 3 Then MsgBox "Length, width and height are needed -" & _ vbLf & "please select three cells!" Exit Sub End If 'Call MyFunction by value using the active cell, E6. ActiveCell.Value = MyFunction(rng) End Sub
Об участнике
Издательство Holy Macro! Books публикует книги о работе с Microsoft Office в занимательном стиле. Полный каталог см. на веб-сайте MrExcel.com.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Меню и команды
В Visual Basic есть два типа меню: встроенные и контекстные.
Встроенные меню
Встроенные меню отображаются в строке меню в верхней части окна Visual Basic. Каждое меню содержит команды, связанные с названием меню. Например, меню Формат содержит команды, которые применяются для форматирования.
Некоторые команды содержат подменю с более конкретными командами. Например, команда Панели инструментов в меню Вид содержит подменю с названиями панелей инструментов и команду Настроить. Используйте команду Настроить , чтобы изменить встроенные меню или добавить команды в строку меню.
- Меню "Надстройки"
- Меню "Отладка"
- Меню "Правка"
- Меню "Файл"
- Меню "Формат"
- Меню "Справка"
- Меню "Вставка"
- Меню "Запуск"
- Меню "Инструменты"
- Меню "Вид"
- Меню "Окно"
Контекстные меню
Контекстные меню — это меню, содержащие часто используемые команды, которые появляются, когда вы щелкаете правой кнопкой мыши или нажимаете сочетание клавиш SHIFT+F10.
Все команды контекстного меню см. в статье Контекстное меню.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?