В начало
Статьи
Библиотека
Разное

Вот здесь - новый сайт, заходите немедленно!

kift - Коллекция Интересных Фактов и Теорий

А тут можно поболтать и побухтеть, милости просим:

kift - неизданное

Введение в программирование на примере VBA

Часть II. Создание макроса-приложения

Аннотация
Предисловие
Часть I. Макрос Word
     1. Проектирование и запись макроса
     2. Разбор макроса
     3. Внесение исправлений
     Итоги
Часть II. Макрос-приложение
     4. Проектирование
    5. Визуальное редактирование
     6. Запуск и остановка
     7. Вывод данных
     8. Выбор ответа
     9. Перемещение по списку
     10. Обратное перемещение
     11. Новая версия
     12. Реализация новой версии
     13. Завершение работы
     Итоги
Часть III. Объект на основе класса
     14. "Основное" приложение
     15. Компонент-таймер
     Итоги
Послесловие

Занятие 5. Построение визуального интерфейса

Данное занятие посвящено созданию визуального интерфейса будущего приложения.

Цикл 1

Если приложение маленькое и изначально понятное, то допустимо ограничиться одним циклом разработки. Но в общем случае следует разбить процесс на несколько циклов.

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

Сформулируем требования первого цикла.

Требования

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

Указание на то, что вопрос с набором ответов выбирается из списка вопросов, подразумевает, что приложение обеспечивает продвижение по списку вопросов.

Подцикл 1. Создание визуального интерфейса

Как видите, требования к циклу довольно объемные. Имеет смысл разделить работу на несколько однотипных стадий-подциклов.

Дело разработчиков – делать ли подчиненные подциклы или пользоваться небольшими равноправными циклами. Имейте в виду, что в таком случае каждый цикл следует начинать с формулировки требований и анализа, тогда как подциклы могут пользоваться данными, полученными в начале цикла.

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

Итак, задача первого подцикла – реализация пользовательского интерфейса приложения.

Под пользовательским интерфейсом будем понимать ту часть приложения, которая непосредственно взаимодействует с пользователем. Для подавляющего большинства программ, созданных для операционной системы MS Windows, под пользовательским интерфейсом понимается то, что видит пользователь при работе с приложением – видимый, визуальный интерфейс.

Объекты, взаимодействующие с пользователем, уже найдены ранее.

  •  «выводитель» вопроса
  • «выводитель» ответов
  • «выбиратель» ответа
  • «выводитель» сводки
  • «переходитель» от вопроса к вопросу.
Проектирование

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

Очевидно, для этого следует иметь представление об этих средствах.

Описание MSForms

Все приложения MS Office могут работать с набором так называемых элементов управления или кóнтролов.

Понятие элемента управления

Элемент управления или кóнтрол – это объект, предоставляющий пользователю возможность вмешиваться в работу приложения, управлять ею.

Как правило, элемент управления имеет некоторое визуальное представление, то есть тем или иным способом отображается на экране монитора. Так как контрол предназначен для взаимодействия с пользователем, он должен как-то реагировать на действия пользователя –манипуляции мышью или нажатия клавиш.

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

Именно такие элементы управления доступны программисту VBA.

Описание контролов VBA

Перечислим элементы управления, входящие в состав VBA и дадим им краткие характеристики.

Метка

Этот элемент управления предназначен для вывода поясняющего текста, если таковой нужен в приложении. Какое-то изменение текста пользователем во время работы приложения не допускается. Название компонента, принятое в VBA – Label.

Текстовое поле

Текстовое поле может выводить текст, а, кроме того, допускается ввод пользователя. Название компонента, принятое в VBA – TextBox.

Список

Выводит список строк. Пользователь может выбирать из списка. Название компонента, принятое в VBA – ListBox.

Поле со списком

Этот элемент управления – своеобразная комбинация текстового поля и списка. Помимо вывода списка значений, позволяется ввод текста пользователем. Название компонента, принятое в VBA – ComboBox.

Флажок

Позволяет «включать» или «выключать» какие-то настройки приложения. Флажки работают независимо друг от друга. Название компонента, принятое в VBA – CheckBox.

Переключатель

Используется как «многопозиционный переключатель», позволяя выбрать одно значение из нескольких возможных. Эти контролы всегда работают в группе. Название компонента, принятое в VBA – OptionButton.

Выключатель

Как и флажок, позволяет «включать» или «выключать» значение. Разница, по большому счету, лишь во внешнем виде. Название компонента, принятое в VBA – ToggleButton.

Рамка

Назначение этого элемента – группирование других элементов согласно каким-то особенностям. Кроме того, рамка применяется для украшения приложений. Название компонента, принятое в VBA – Frame.

Кнопка

Один из распространеннейших контролов. Обеспечивает реакцию приложения на щелчок мыши. Название компонента, принятое в VBA – CommandButton.

Набор вкладок, набор страниц

Оба этих контрола позволяют группировать другие элементы управления по группам и экономят место. Разница – в деталях использования (в общем случае набор страниц использовать проще). Название компонентов, принятое в VBA – TabStrip и MultiPage.

Полоса прокрутки

Предназначена для «прокрутки» других элементов управления. Другое возможное применение – «регулятор-ползунок» для плавного изменения какого-то значения. Название компонента, принятое в VBA – ScrollBar.

Счетчик

Предназначен для изменения какого-то значения. Название компонента, принятое в VBA – SpinButton.

Как правило, используется в паре с текстовым полем, что позволяет отслеживать текущее значение и вводить его вручную.

Рисунок

Декоративный элемент управления, выводящий рисунки. Название компонента, принятое в VBA – Image.

Как видно, в набор VBA входит довольно ограниченный набор простейших элементов управления, некоторые из которых дублируют друг друга и не являются необходимыми Но, к счастью, язык VBA позволяет использовать другие элементы управления, создаваемые программистами всего мира. Список этих элементов поистине необъятен, они выполняют самые разные функции. Но качество исполнения, к сожалению, разное, зачастую элементы управления не имеют в составе поставки справочной информации. В процессе работы мы попытаемся научиться узнавать то, что нам нужно, не используя справку.

Выделение объектов, взаимодействующих с пользователем

Вернемся к проектированию приложения.

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

Сначала из списка объектов, который мы создали на предыдущем шаге, выделим объекты, которые будут взаимодействовать с пользователем.

Освежите список в памяти:

  • «выводитель» вопроса
  • «выводитель» ответов
  • «выбиратель» ответа
  • «выводитель» сводки
  • «переходитель» от вопроса к вопросу.

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

Составим таблицу:

Объект Действие
«выводитель» вопроса вывод вопроса – текущего в списке вопросов.
«выводитель» ответов вывод списка ответов, относящихся к текущему вопросу
«выбиратель» ответа выбор (пользователем) одного ответа из выведенного списка ответов
«выводитель» сводки вывод сводки-результата теста
«переходитель» от вопроса к вопросу переход по списку вопросов. При этом меняется текущий вопрос и, соответственно, список ответов.

Теперь проанализируем созданную таблицу. При этом будем сверяться с тем, что нам уже известно об элементах управления VBA. Быть может, мы сможем определить, какой элемент управления будет использован в том или ином случае.

«Выводитель» вопроса будет выводить вопрос (мы негласно условились, что в этой версии приложения вопросы и ответы будут представлены только в текстовом виде). Никакого вмешательства пользователя в текст вопроса не нужно и даже нежелательно.

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

«Выводитель» ответов будет выводить список ответов.

Используем элемент «список»? Стоп! Обратите внимание на следующую строку в таблице. «Выбиратель» ответа также работает с тем же объектом – списком вопросов. Будет совершенно правильно объединить «выводитель» и «выбиратель» ответов.

Действительно, можно было бы, предположим, выводить ответы и, к примеру, предлагать ввести номер правильного ответа в текстовое поле. Но зачем усложнять? Если мы не преследуем никаких других целей, то подобное решение будет говорить о некомпетентности автора как проектировщика и дизайнера. Запомните – простота и удобство!

Предлагаем использовать элемент «переключатель». Недостаток – невозможность прокрутки, если текст ответа большой. Но тогда вы сможете комбинировать «переключатель» с «текстовым полем». А в большинстве тестов ответы короткие – в отличие от вопросов.

«Выводитель» сводки мы пока проектировать не будем. Он нужен в самом конце теста, а в ходе теста дополнительный контрол будет лишь занимать место и отвлекать внимание. «Выводитель» сводки мы сделаем особым образом.

Для перехода по набору вопросов можно использовать разные элементы управления: счетчик, полосу прокрутки, дополнительные контролы, не входящие в основной набор. Но, придерживаясь принципа простоты, мы используем элемент «кнопка». Так как переход возможен как вперед, так и назад, кнопки будет две.

Проектирование визуального интерфейса

Теперь, имея понятие об используемых компонентах, спроектируем внешний вид будущего приложения.

  • Сделайте это, используя бумагу и карандаш.

Должно получиться примерно так:

При построении пользовательского интерфейса основное, на что следует обращать внимание – интуитивность и удобство. Как считается, в первую очередь воспринимается то, что находится вверху диалогового окна, в частности – в верхней левой части, а в последнюю – информация внизу справа. У нас информативные блоки размещены именно так. Элементы управления должны размещаться так, чтобы при манипуляциях с ними курсор мыши не мешал воспринимать другие отделы окна – у нас именно так. Очевидное требование, к сожалению, не всегда исполняемое проектировщиками – однообразность расположения однородных частей окна. У нас – именно так. Можно считать, что дизайн приложения выполнен верно.

А вот, для примера, неверный дизайн:

Не правда ли, неудобно?

К сожалению, многие начинающие программисты допускают подобные «шедевры». Не делайте так!

Назначение имен контролам

Теперь назначим имена элементам управления.

Как говорилось выше, элемент управления – объект, только специфический. Все, что говорилось об объектах, применимо и к контролам. А один из необходимых атрибутов объекта – имя.

Согласно имени VBA будет различать объекты, по имени будет обращаться к объекту и производить какие-то манипуляции с ним. Имя уникально в пределах проекта.

Грамматика имен контролов ничем не отличается от грамматики имен макросов, которую мы описали раньше.

Нарисуем новую схему пользовательского интерфейса приложения и подпишем имена, соответствующие каждому контролу:

Обратите внимание на схему именования, общепринятую в программах на VBA. А именно, имя объекта начинается с префикса, который характеризует тип объекта. Например, самый верхний объект на нашей схеме носит имя txtQuestion. Префикс txt – от Text(Box), Текст (Текстовое Поле). QuestionВопрос, так как этот контрол будет отображать вопрос текста.

Аналогично придуманы имена остальных контролов. Префикс optOptionButton, название контрола «переключатель», cmd – от CommandButton, КоманднаяКнопка или просто «кнопка».

Как видите, едва взглянув на схему, можно допустить некоторые догадки о предназначении и типе элементов.

Назначая имена объектам и другим сущностям, следует придерживаться принципа интуитивной понятности.

Выбор платформы для построения приложения

Последнее, с чем следует определиться, прежде чем переходить к этапу реализации – платформа. Что будет субстратом приложения, какой язык будет использован и так далее.

У нас выбор невелик. Мы используем VBA, так как все пособие посвящено этому языку, субстратом будет одно из приложений MS Office. Приложение, спроектированное нами, можно создать в любом из них без каких бы то ни было изменений.

Существенным для выбора рабочего приложения MS Office являются данные, используемые нашим приложением.

Данные как критерий выбора субстрата

Давайте проанализируем структуру данных.

Как мы решили, будущее приложение будет использовать набор вопросов.

Каждому вопросу соответствует набор ответов.

Один из ответов должен быть помечен как правильный (другой, более эффективный, но более сложный для реализации вариант – каждому ответу присваивается «степень верности», тогда ответ может быть не только «верный» или «неверный», но и «более-менее верный». Мы так делать не будем, захотите – сделаете сами. Когда материал пособия будет усвоен, вы легко справитесь с этим).

Также должен существовать набор, хранящий выбор пользователя. Используя этот набор, будет проводиться оценка эффективности тестирования.

Очевидно, можно сделать так: «один вопрос – один выбор пользователя». Тогда выбор пользователя будет заключать в себя номер выбранного ответа.

Либо «один ответ – один выбор». Это позволило бы делать множественный выбор, когда правильны несколько ответов.

Все эти вопросы должны быть освещены в требовании и проанализированы.

Изберем простое решение.

Только один ответ может быть верным, меру верности не используем.

  • Нарисуйте схему данных:

Такая структура будет для каждого вопроса.

Связи и зависимости объектов принято изображать на схемах при помощи соединительных линий.

  • Расположите поля по-другому:

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

Можно, правда, разместить все данные в одну строку. Это немного улучшит ситуацию. Но мы не будем делать этого – чтобы в дальнейшем продемонстрировать некоторые приемы.

Оптимальный выбор для данных такого рода – MS Access. Использование этого «субстрата» позволит работать с данными очень больших объемов, исключить «пустое место» будет просто, возможно будет вести учет ответов разных пользователей, данных ими на разные тесты и в разное время.

Но подобное мощное и надежное приложение сложно в построении. Мы применим «субстрат», изначально предназначенный для работы с таблицами – MS Excel. Тем самым мы не будем использовать все описанные заманчивые возможности, но получим простоту и понятность при создании приложения. В дальнейшем, после успешного усвоения материала, вы сможете без особого труда перенести свое приложение на платформу MS Access.

Итак, наш выбор – MS Excel. Приступим.

Реализация пользовательского интерфейса

Итак, приступим к реализации пользовательского интерфейса будущего приложения.

Делается это в IDE VBA.

  • Запустите Excel.

Создание документа Excel

Как правило, при запуске создается новый пустой документ Excel, называемый книгой. Если этого не произошло – создайте новую книгу.

  • Сохраните книгу в вашем рабочем каталоге, предназначенном лишь для работы с будущим приложением. Назовите книгу, к примеру, test.xls.
  • Вызовите IDE VBA. Делается это так же, как и в MS Word – нажатием [Alt]+[F11].

Обзор книги Excel

Осмотрите окна IDE. В окне Project Explorer видны составные части книги Excel:

Следует решить, где же мы будем размещать контролы.

Выбор места для размещения контролов

Нет запретов для помещения элементов непосредственно на листы книги Excel. Быть может, это вам понадобится когда-нибудь, но сейчас наша задача – научиться общим приемам. Нам не нужны листы Excel и предоставляемые ими широчайшие возможности, как мы условились, Excel в данном конкретном случае – лишь «субстрат» и хранилище данных.

Добавление компонента к проекту

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

  • Совершите правый щелчок где-нибудь в окне Project Explorer.
  • В появившемся контекстном меню выберите команду InsertUserForm (ВставитьПользовательскуюФорму):

В окне Project Explorer появится новый объект UserForm1:

С этим объектом мы и будем работать.

Как можно заметить, мы переключили отображение содержимого окна Project Explorer. Исчезло разбиение по типам объектов, сейчас объекты расположены в алфавитном порядке. Это переключение производится третьей слева кнопкой вверху окна Project Explorer. Вы можете использовать любой вариант, вопрос в удобстве.

Переименование формы

Первое, что нужно сделать – переименовать вновь созданный объект.

Согласитесь, что имя UserForm1, назначенное языком VBA вновь созданному объекту, ничего не говорит о назначении объекта. Давайте назовем этот объект frmTest. Префикс frm – от Form (Форма).

Окно Properties

Настало время близкого знакомства с другим окном IDE VBA – окном Properties.

Окно Properties (Свойства) предназначено для изменения некоторых свойств объектов.

Эти изменения возможно делать только при создании приложения.

Вот это окно:

Если вы не видите этого окна, вызовите его.

Для вызова окна Properties выполните команду меню ViewProperties Window (ВидОкно Свойств).

Иначе – нажмите [F4].

Еще один способ – щелкнуть по кнопке на панели кнопок IDE VBA:

Перед вами окно Properties.

В заголовке окна – строка Properties - UserForm1. Иначе говоря – имя объекта, с которым в данный момент работаем.

Ниже – «падающий» список, содержащий все доступные объекты. Если почему-то в списке выбран другой объект, не UserForm1 – выберите его.

Ниже – две вкладки, Alphabetic и Categorized. Они предназначены для отображения доступных во время редактирования свойств. Соответственно, на вкладке Alphabetic свойства будут расположены в алфавитном порядке, а на вкладке Categorized – по категориям. С какой из вкладок работать – ваш выбор. Для простоты мы будем обращаться только к первой вкладке.

Содержимое окна Properties – таблица из двух столбцов. В первом столбце – название свойства, во втором – значение.

Приступим к переименованию созданного объекта-формы.

Переименование формы

  • Найдите в окне Properties строку, соответствующую свойству NameИмя.

Как правило, это свойство всегда в начале «таблицы» (не забудьте, мы работаем с вкладкой Alphabetic). Уникальность свойства Name подчеркивается особым написанием – в скобках.

Вспомните синтаксис свойств:

<объект>.<свойство>

Так вот, к свойству Name так обратиться нельзя. Здесь свойству Name будет соответствовать <объект>.

В процессе работы приложения свойство Name не может быть изменено никаким способом.

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

Вот строка свойства Name (выделена и помечена курсором мыши):

Значение свойства NameUserForm1, что мы уже видели в Project Explorer.

  • Выделите (двойным щелчком) правую ячейку и введите новое значение:

Обратите внимание, что везде в IDE слово UserForm1 изменится на введенное нами. Например, в Project Explorer:

Изменения значений других свойств происходит похожим образом, в дальнейшем мы будем заострять внимание лишь на особенностях работы с тем или иным свойством.

Теперь отобразим созданную форму в IDE и приступим к размещению элементов управления.

Введение в визуальное редактирование

Для отображения объекта используются два способа.

Во-первых, можно выполнить двойной щелчок на объекте в окне Project Explorer.

Во-вторых, можно использовать кнопки вверху окна Project Explorer. Левая кнопка отобразит текст программы, относящийся к выбранному объекту, а вторая слева кнопка отобразит объект – если это возможно. Как мы уже разбирали раньше, такие объекты, как модули не имеют собственного вида.

  • Выполните двойной щелчок на компоненте frmTest.

Перед вами – заготовка формы:

Это – окно визуального редактирования IDE VBA.

Заголовок окна содержит строку test.xls - frmTest (UserForm). Как можно догадаться, это – название файла проекта, имя объекта, а в скобках – тип объекта, с которым происходит работа.

«Квадратиками» окружена заготовка будущей формы. Именно с ней будем работать.

Окно Toolbox

Как видите, появилось новое окно IDE. В заголовке слово ToolboxИнструменты. На вкладке этого окна – доступные для текущего проекта контролы. Наводя курсор на значки в окне Toolbox, вы можете наблюдать подсказки с названиями контролов:

Курсор наведен на значок контрола LabelМетка. Краткое описание контролов было дано раньше.

Если окно Toolbox не видно, следует вызвать его. Это можно сделать так:

Выполните команду меню ViewToolbox (ВидИнструменты).

Иначе – щелкните на кнопке IDE VBA:

  • Пока закройте окно Toolbox или перетащите его в сторону.

Поработаем еще немного с формой.

Основные приемы визуального редактирования

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

Попробуем освоить один из основных приемов визуального редактирования – изменение размеров объекта.

Для изменения размеров предназначены «квадратики» по краям объекта.

  • Наведите курсор мыши на белый квадратик (справа или внизу заготовки формы).

Курсор изменит вид:

  • Сохраняя положение курсора, нажмите и удерживайте левую клавишу мыши.

Теперь, при перемещении курсора, будет соответственно перемещаться «квадратик» – и изменяться размер формы.

Когда вы отпустите левую клавишу мыши – размеры формы «зафиксируются».

  • Попробуйте самостоятельно изменить ширину формы, затем – высоту, а потом – оба размера одновременно. Найдите «квадратики», позволяющие выполнить эти действия.

Способы запуска приложения

Следующим шагом будет пробный запуск приложения.

Одна из особенностей VBA – возможность пробного запуска еще не завершенного приложения. Это помогает контролировать внешний вид и поведение программы и вовремя вносить нужные поправки.

Есть два основных способа запуска приложения в среде IDE VBA.

Первый способ – нажатие [F5].

Второй – щелчок по кнопке:

Способы эти равнозначны, вы можете делать так, как вам удобно.

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

В некоторых случаях VBA не сможет однозначно определить, какой именно макрос следует запустить и выведет диалоговое окно с вопросом. Тогда следует закрыть это окно, один раз щелкнуть по заготовке формы и повторить попытку запуска.

  • Запустите приложение.

Как видите, окно визуального редактирования исчезло, а на экране, поверх IDE VBA появилось окно, идентичное тому, с которым шла работа. Вы можете перемещать его по экрану, переходить на другие окна. Для этого окна недоступно изменение размеров и «сворачивание» в значок на панели задач – но подобные ограничения накладывает язык VBA, обойти их не удастся.

Остановите выполнение приложения.

Это также можно сделать по-разному.

Во-первых, можно закрыть окно приложения обычным для Windows способом – щелчком по кнопке в верхнем правом углу окна.

Во-вторых, можно щелкнуть по кнопке IDE VBA:

Совет на будущее. Если приложение почему-то не закрывается, или среда IDE VBA не реагирует на ваши действия – это бывает, например, при неправильно созданном бесконечном цикле Do...Loop, – можно приостановить выполнение приложения.

Для приостановки:

нажмите [Ctrl]+[Pause]

или щелкните (если это возможно) на кнопке:

Далее вы можете продолжить выполнение (тем же способом, каким производится запуск приложения), либо остановить выполнение окончательно.

Добавление контролов на форму

Перейдем к размещению контролов на заготовке формы.

  • Откройте окно Toolbox, если вы закрыли его раньше.
  • Поместите перед собой эскиз будущего приложения с подписанными именами объектов.

Начнем с верхнего контрола. Это – TextBox.

  • Найдите на Toolbox кнопку, соответствующую контролу TextBox:

  • Щелкните на ней один раз.

Теперь можно расположить контрол TextBox на заготовке формы.

  • Переместите курсор мыши на заготовку формы.

Курсор изменит вид:

Это значит, что IDE готова к размещению контрола. У других контролов форма курсора может быть другой.

Дальнейшие действия могут различаться.

Способы помещения контрола на форму

Вы можете один раз щелкнуть измененным курсором на заготовке формы. На ней появится заготовка текстового поля небольшого стандартного размера:

Обратите внимание, что «квадратики» вокруг формы исчезли, зато появились вокруг вновь созданного контрола.

Если вы хотите сразу поместить контрол на форме, придав ему требуемые размеры, можно сделать так:

  • выбрать контрол одиночным щелчком на соответствующей кнопке Toolbox,
  • переместить курсор мыши на заготовку формы – вид курсора при этом изменится,
  • нажать и удерживать левую кнопку мыши в том месте, где будет находиться один из углов контрола,
  • не отпуская левой клавиши мыши, переместить курсор туда, где будет находиться противоположный угол контрола:

  • отпустить левую клавишу мыши.
  • Любым способом поместите заготовку текстового поля на заготовку формы, измените размеры элемента управления.

Контрол готов:

Визуальное редактирование контролов

«Квадратики» на границах элемента управления предназначены для изменения размеров контрола совершенно аналогично тому, как это делалось для формы. Только для работы вам доступны все «квадратики», а не только правые и нижние, как для формы.

Кроме того, «схватив» мышью за контрол, вы можете перенести его в другое место формы, не изменяя размеров.

Если вы еще раз щелкнете на контроле, то увидите, что «ободок» вокруг контрола изменится и появится текстовый курсор – вертикальная мигающая черточка:

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

  • Попробуйте ввести какую-нибудь строку:

А теперь отследите значение свойства Text в окне Properties:

Как видите, значение свойства действительно изменилось.

Как правило, подобный способ ввода используется, когда вам нужно внести много декоративных надписей на однотипные контролы.

В общем случае следует использовать окно Properties.

Перенос фокуса

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

  • Щелкните на заготовке формы.

Как видите, «квадратики» вновь окружают форму, а созданный контрол обрел обычный вид.

Это действие носит название «переместить фокус». Фокус на том объекте, который окружен «квадратиками».

Другой способ переместить фокус – выбрать название нужного объекта в списке вверху окна Properties.

  • Попробуйте сделать это.

Второй способ применим, к примеру, когда контрол не виден потому, что «заслонен» другими объектами. Или когда на заготовке формы, созданной кем-то другим, много элементов, и вы хотите разобраться в них.

  • Удалите текст из созданного контрола.
  • Аналогичным способом добавьте на форму другие контролы, требуемые для приложения. А именно – три элемента OptionButton и два CommandButton.

Заготовка формы примет примерно такой вид:

Размещение контролов на форме

Теперь следует разместить элементы управления согласно эскизу, сделанному нами ранее.

  • Сделайте это:

Теперь переименуем все контролы соответственно именам, определенным во время проектирования.

  • Сделайте это самостоятельно.

Не забывайте время от времени сохранять проект.

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

Переход по контролам с использованием клавиатуры

  • Запустите приложение.
  • Попробуйте несколько раз нажать [Tab].

Вы увидите, что контролы по очереди «выделяются» пунктирной рамкой, а текстовое поле получает курсор.

Это – поведение приложения, предназначенное для управления клавиатурой. Это бывает нужно, к примеру, в случаях неполадок мыши.

Порядок перехода выделения определяется свойством TabIndex, которое есть у каждого контрола, который может участвовать в данной последовательности перехода при помощи клавиши [Tab].

Вы можете исключить контрол из последовательности, изменив его свойство TabStop. Значение TabStop, равное TrueИстина, – включает контрол в последовательность перехода, изменение значения на FalseЛожь, – исключает его.

Попробуем изменить свойство TabStop.

  • Остановите приложение.
  • Перенесите фокус, предположим, на одну из CommandButton:

  • Перейдем в окно Properties и найдем строку свойства TabStop:

Как видите, в правой колонке появилась кнопка со стрелкой вниз.

  • Нажмите на нее:

Появился падающий список с перечнем возможных значений свойства.

Подобное поведение окна Properties помогает назначению свойств, имеющих предопределенный набор значений.

  • Попробуйте поэкспериментировать со свойствами TabStop и TabIndex для элементов управления формы.

Проверьте, соответствует ли последовательность перехода следующей:

  1. txtQuestion
  2. optAnswer1
  3. optAnswer2
  4. optAnswer3
  5. cmdPrev
  6. cmdNext
  • Если нужно, скорректируйте свойства контролов для того, чтобы данная последовательность выполнялась.

В общем случае переходы между контролами производятся «сверху вниз» «слева направо», хотя, конечно, могут быть исключения.

Заметьте, что VBA назначает значения TabIndex соответственно последовательности помещения контролов на форму.

  • Сохраните проект.

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

Итог занятия

Это занятие было практическим. Пожалуй, здесь не наберется материала на конспект, но не страшно – учебник изначально предназначен для обучения практической работе. А уж практики в ходе занятия было достаточно…

Тем не менее, вы познакомились и с важным принципом построения приложений. Имеется в виду построение визуального интерфейса на основе данных, полученных при проектировании приложения. Как уже упоминалось, одна из распространенных ошибок начинающих – начинать работу с «рисования» внешнего вида программы в IDE, после чего горе-программист зачастую заходит в тупик и путается в собственных замыслах, не зная, что же дальше… Тогда как соблюдение последовательности процесса – от требований к анализу, от него – к проектированию, и далее – к созданию визуального интерфейса на основе полученных сущностей – облегчает и упорядочивает работу, исключая путаницу.

Следует обратить внимание на момент назначения имен объектам. Как вы поняли, имя – важнейший атрибут объекта, с которым и будет идти дальнейшая работа. Своевременное назначение имени избавит вас от многократной переделки кода.

К документации, которую вы ведете, следует добавить таблицу имен объектов в виде «имя – тип объекта – описание объекта», например, так:

...    
cmdNext CommandButton Кнопка для перехода на следующий вопрос теста
...    

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

Hosted by uCoz