
- •Часть 2. Сборник рецептов по визуальному программированию Введение в объектно-ориентированное программирование
- •Создание проекта в VisualStudio
- •Файлы проекта
- •Сведения об объекте
- •Общие свойства всех объектов
- •Класс Form
- •Помещение компонента в форму и прочие действия с дизайнером форм
- •Свойства форм
- •События формы
- •Методы формы
- •Компоненты ввода и отображения текстовой информации Компонент Label
- •Некоторые свойства компонента Label
- •Компонент TextBox
- •Методы TextBox
- •Компонент RichTextBox
- •Ввод числовых значений в компонент TextBox
- •Проверка, введены ли значения
- •Компонент ListBox
- •Компонент ComboBox
- •Ввод данных из файла
- •Компонент MaskedTextBox
- •Кнопки, индикаторы и управляющие элементы Компонент Button
- •Компонент Panel
- •Компоненты RadioButtonиCheckBox
- •Компонент GroupBox
- •Пример. Комплектация автомобиля
- •Работа с меню Главное меню
- •Контекстное меню
- •Создание текстового редактора
- •Системные диалоги
- •Компонент OpenFileDialog
- •Компонент SaveFileDialog
- •Диалог выбора шрифта
- •Диалог выбора цвета
- •Компонент PrintDialog
- •Диалоговые окна в текстовом редакторе
- •Расширенные символы Unicode
- •Работа с графикой Использование графических файлов
- •Создание фотоальбома
- •Методы для рисования на форме и прочих компонентах
- •Работа с таймером
- •Работа с датой и временем
- •Добавление новых форм к проекту
- •Многостраничные панели
- •Способы задания страниц
- •Методы TabControl
Работа с меню Главное меню
Компонент MenuStripнаходится в спискеMenus&Toolbarsпалитры компонентов. Он создает главное меню приложения, с помощью которого управляет всей работой приложения и его частей.
Разные части приложения запускаются на выполнение отдельными командами, собранными в эту структуру. Выход из приложения тоже происходит через меню. Структуру меню определяет пользователь.
Меню формируется в форме после того, как его значок перенесен из палитры компонентов в форму. С этой формой меню будет связано через свойство формы MainMenuStrip, в окне которого и появляется имя компонента.
Когда меню сформировано, то после запуска приложения на выполнение в левой верхней части формы будет расположена строка, содержащая главные опции этого меню. Главные опции могут содержать и более детальные команды, располагающиеся на этот раз уже в столбик.
При переносе компонента из палитры в форму значок располагается не в самой форме, а в нижней части рабочего стола. В то же время в верхней части формы появляется синяя полоса для отображения будущих опций меню.
Чтобы назначить пункту меню выполняемые действия, необходимо описать соответствующее событие Click.
Кроме того, во многих существующих приложениях для обеспечения большей скорости работы оператора реализована не только возможность вызова функций с помощью меню, но и предусмотрено использование тех или иных горячих клавиш.
Для дублирования действий мыши работой с клавиатурой необходимо активизировать созданную опцию меню и среди свойств найти ShowShortcutKeysиShortcutKeys. Первое из них обеспечивает видимость клавиш быстрого вызова в наименовании опции (если эти клавиши будут определены). Второе свойство задает комбинацию клавиш, при нажатии которых опция станет выполняться так, как если бы на ней щелкнули мышью.
Кроме этих, меню обладает еще и следующими свойствами.
BackgroundImage– задает фоновое изображение, которое помещается в полосу меню и на фоне которого будут видны его опции. С помощью свойстваBackgroundImageLayoutизображение можно подогнать под соответствующий формат.
Items– через диалоговое окно этого свойства могут формироваться опции меню.
LayoutStyle– стиль размещения меню.
Контекстное меню
Компонент ContextMenuStripнаходится в спискеMenus&Toolbarsпалитры компонентов. Этот компонент придает другому компоненту, с которым он связывается, дополнительные функциональные возможности, он может быть связан с любым другим компонентом (формой, кнопкой и т.д.), имеющим свойствоContextMenuStrip. Когда компонент помещается в форму, его имя будет видно в любом из компонентов формы, у которого есть свойствоContextMenuStrip. Это обычное меню, где пользователь определяет порядок действий при активизации компонента, с которым данное меню связано. Если меню связано с формой, то оно появляется, когда пользователь нажимает в активной форме правую кнопку мыши.
Создание текстового редактора
Рассмотрим работу с меню на примере разработки текстового редактора «Блокнот». На примере этого приложения позже будет рассмотрена работа с различными стандартными диалогами и процедура отображения дочернего окна приложения.
Сейчас создадим главную форму этого приложения. Это окно содержит в себе компонент TextBox, отображающий текст в многострочном режиме, и компонентMenuStrip.
В первую очередь составим меню для блокнота. Оно будет состоять из следующих пунктов (для некоторых из пунктов укажем и горячие клавиши):
Файл
Создать, Ctrl+N
Открыть, Ctrl+O
Сохранить, Ctrl+S
Печать, Ctrl+P
Выход
Редактирование
Вырезать, Ctrl+X
Копировать, Ctrl+C
Вставить, Ctrl+V
Очистить, Ctrl+Z
Цвет фона, Ctrl+B
Шрифт, Ctrl+F
Специальная функция
Помощь
О программе
Об авторе
Спроектируем форму. Для этого сперва поместим на нее компонент TextBoxи установим его свойства:AcceptsReturn=true(при нажатии наEnterкурсор переходит на новую строку),ScrollBars=Vertical(отобразить вертикальную полосу прокрутки),Multiline=true(перевести компонент в режим многострочного редактирования),Dock=Full(растянуть компонент по размерам проектируемого окна, для этого достаточно щелкнуть по центральному квадрату в выпадающей схеме для свойстваDock). В результате компонент для ввода текста будет иметь неактивную полосу прокрутки и будет растянут по размеру окна.
После этого переходим к проектированию меню. Помещаем на форму компонент MenuStrip. В результате в верхней части окна будет предложено ввести все пункты проектируемого меню. Для окончания ввода достаточно щелкнуть в произвольном месте на форме.
Если программу запустить в таком виде, она будет представлять собой не функционирующий блокнот.
Прежде, чем перейти к подробному описанию функций открытия файла, сохранения в файл и прочих процедур, связанных с работой диалогов, опишем некоторые события Clickдля пунктов меню.
Для удобства рекомендуется переименовать переменные, отвечающие за работу пунктов меню. Ниже приведен список назначенных имен переменных. Заметим, что имена давались только пунктам меню, т.к. основная работа приложения идет именно с ними.
Файл
Создать (NewText)
Открыть (OpenText)
Сохранить (SaveText)
Печать (PrintText)
Выход (GetOut)
Редактирование
Вырезать (CutText)
Копировать (CopyText)
Вставить (PasteText)
Очистить (ClearText)
Цвет фона (BkColor)
Шрифт (FontText)
Специальная функция (Spec)
Помощь
О программе (Prog)
Об авторе (Author)
Самым простым для обработки является событие Clickдля выхода из приложение (выбор пунктаGetOut). В обработчике этого события достаточно написать функциюClose();.
Далее напишем функцию для создания нового документа. Она будет находиться в обработчике события Clickдля пункта менюNewText. Эта функция будет давать окну название «Новый документ», полностью очищать компонент для ввода текста и устанавливать флаг «был ли изменен текст» какfalse(никаких изменений не произведено).
Таким образом, код будет выглядеть так.
Text=”Новый документ”;
textBox1->Clear();
Changed=false;
Обработаем событие TextChangedдля компонентаtextBox1. Это необходимо для того, чтобы было возможно определить, изменился ли текст в поле компонента, и, как следствие, требуется ли дальнейшая обработка измененного содержимого. Функция будет состоять из единственной строки, которая устанавливает флаг в значениеtrue:
Changed=true;
Саму логическую переменную Changedобъявим в секцииprivateкласса формы и будем использовать при написании последующих функций.