Как открыть окно редактора visual basic из формы в режиме конструктора для обработки события
Перейти к содержимому

Как открыть окно редактора visual basic из формы в режиме конструктора для обработки события

  • автор:

Управление окнами редактора

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

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

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

Разделение окна редактора

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

Разделение области

  1. Щелкните в окне редактора, чтобы сделать его активным.
  2. В меню Окно выберите команду Разделить. Область редактирования разбивается на две области, отделенные линией разделения. Эти области можно прокручивать независимо друг от друга, чтобы просматривать и изменять разные части активного документа одновременно. Любые изменения, внесенные в одной области, отражаются и в другой.

Совет Чтобы сделать одну область больше другой, перетащите линию разделения вверх или вниз.

Возврат к представлению с одной областью

  • В меню Окно выберите команду Снять разделение.

Создание новых окон

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

  • В меню Окно щелкните Создать окно. Добавляется новый экземпляр редактора с вкладками.

См. также

  • Возможности редактора кода
  • Настройка макетов окон

Руководство. Начало работы с конструктором Windows Forms

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Конструктор Windows Forms предоставляет множество средств для создания приложений Windows Forms. В этой статье показано, как создать приложение с помощью различных средств, предоставляемых конструктором, включая следующие задачи:

  • Упорядочение элементов управления с помощью оснастки.
  • Выполнение задач конструктора с помощью смарт-тегов.
  • устанавливать поля и отбивки для элементов управления;
  • Упорядочение элементов управления с помощью TableLayoutPanel элемента управления.
  • разделять макет элемента управления с помощью элемента управления SplitContainer;
  • просматривать макет в окне «Структура документа»;
  • размещать элементы управления с отображением размера и сведений о расположении;
  • Задайте значения свойств с помощью окно свойств.

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

Если вы являетесь разработчиком C++ и ищете руководство по созданию приложения Windows, которое включает формы и элементы управления, см. статью Создание приложения MFC на основе форм. Дополнительные обобщенные сведения см. в разделе Обзор программирования Windows на C++.

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

Первым шагом является создание проекта элемента управления DemoCalculator.

Screenshot of the Windows Forms Control Library template in Visual Studio.

  1. Откройте Visual Studio и создайте проект библиотеки элементов управления Windows Forms с помощью шаблона платформа .NET Framework для C# или Visual Basic. Задайте проекту имя DemoCalculatorLib.
  2. Чтобы переименовать файл, в обозревателе решений щелкните правой кнопкой мыши элемент UserControl1.vb или UserControl1.cs, выберите Переименовать и замените имя файла на DemoCalculator.vb или DemoCalculator.cs. Выберите «Да «, когда вам будет предложено переименовать все ссылки на элемент кода UserControl1.

В конструктор Windows Forms отображается поверхность конструктора для элемента управления DemoCalculator. В этом представлении можно графически спроектировать внешний вид элемента управления, выбрав элементы управления и компоненты на панели элементов и поместив их на поверхности конструктора. Дополнительные сведения см. в статье о разновидностях пользовательских элементов управления.

Разработка макета элемента управления

Элемент управления DemoCalculator содержит несколько элементов управления Windows Forms. В этой процедуре вы упорядочены элементы управления с помощью конструктора Windows Forms.

  1. В конструкторе Windows Forms увеличьте размер элемента управления DemoCalculator, выбрав маркер изменения размера в правом нижнем углу и перетащив его вниз и вправо. В правом нижнем углу Visual Studio просмотрите сведения о размере и расположении элементов управления. Задайте элементу управления ширину 500 и высоту 400, наблюдая за сведениями о размере при изменении размера элемента управления.
  2. На панели элементов выберите узел Контейнеры, чтобы открыть его. Выберите элемент управления SplitContainer и перетащите его на поверхность конструктора. Элемент SplitContainer появится на поверхности конструктора элемента управления DemoCalculator.

Совет Размер элемента управления SplitContainer автоматически устанавливается в соответствии с размером элемента управления DemoCalculator. В окне Свойства проверьте свойства, заданные для элемента управления SplitContainer . Найдите свойство Dock. Ему задано значение DockStyle.Fill. Это означает, что размер элемента управления SplitContainer устанавливается в соответствии с границами элемента управления DemoCalculator. Измените размер элемента управления DemoCalculator, чтобы проверить это поведение.

Примечание. Для некоторых элементов управления доступны смарт-теги, упрощающие проектирование. Дополнительные сведения см. в пошаговом руководстве. Выполнение распространенных задач с помощью смарт-тегов в элементах управления Windows Forms.

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

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

  1. На панели элементов выберите значок элемента управления TextBox . Элемент управления TextBox помещается в первую ячейку элемента управления TableLayoutPanel .
  2. В окне Свойства замените значение свойства ColumnSpan элемента управления TextBox на 5. Элемент управления TextBox переместится в центр своей строки.
  3. Замените значение свойства Anchor элемента управления TextBox на Left , Right . Элемент управления TextBox расширится по горизонтали, заняв все пять столбцов.
  4. Измените значение свойства TextBox элемента управления TextAlign на Right .
  5. В окне Свойства разверните узел свойства Font . Задайте значение 14 для Size и true для Bold у элемента управления TextBox .
  6. Выберите элемент управления TableLayoutPanel .
  7. На панели элементов выберите значок Button . Элемент управления Button разместится в следующей свободной ячейке элемента управления TableLayoutPanel .
  8. На панели элементов выберите Button еще четыре раза, чтобы заполнить вторую строку элемента управления TableLayoutPanel .
  9. Выберите все пять элементов управления Button , удерживая нажатой клавишу SHIFT. Нажмите клавиши CTRL+C, чтобы скопировать элементы управления Button в буфер обмена.
  10. Трижды нажмите сочетание клавиш CTRL+V, чтобы вставить скопированные элементы управления Button в оставшиеся строки элемента управления TableLayoutPanel .
  11. Выберите все 20 элементов управления Button , удерживая нажатой клавишу SHIFT.
  12. В окне Свойства замените значение свойства Dock на Fill . Все элементы управления Button закрепятся в своих ячейках.
  13. В окне Свойства разверните узел свойства Margin . Для All задайте значение 5. Всем элементам управления Button задается меньший размер, чтобы увеличить поля между ними.
  14. Выберите button10 и button20, после чего нажмите клавишу DELETE, чтобы удалить их из макета.
  15. Выберите button5 и button15, после чего замените значение их свойства RowSpan на 2. Эти кнопки представляют кнопки Clear и = button for the DemoCalculator control.

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

Если в элементе управления или форме присутствует несколько элементов управления, перемещаться по макету удобнее с помощью окна «Структура документа».

  1. В строке меню выберите Вид>Другие окна>Структура документа. В этом окне структура элемента управления DemoCalculator и его составных элементов управления представлена в виде дерева. Дочерние элементы управления контейнерных элементов управления, таких как SplitContainer , отображаются в виде подузлов дерева. Вы также можете переименовать элементы управления с помощью окна «Структура документа».
  2. В окне Структура документа щелкните правой кнопкой мыши элемент button1, чтобы выбрать его, после чего щелкните Переименовать. Замените его имя на sevenButton.
  3. В окне Структура документа замените имена элементов управления Button , заданные конструктором, на имена для рабочей среды согласно следующему списку:
    • button1 на sevenButton;
    • button2 на eightButton;
    • button3 на nineButton;
    • button4 на divisionButton;
    • button5 на clearButton;
    • button6 на fourButton;
    • button7 на fiveButton;
    • button8 на sixButton;
    • button9 на multiplicationButton;
    • button11 на oneButton;
    • button12 на twoButton;
    • button13 на threeButton;
    • button14 на subtractionButton;
    • button15 на equalsButton;
    • button16 на zeroButton;
    • button17 на changeSignButton;
    • button18 на decimalButton;
    • button19 на additionButton;
  4. С помощью окон Структура документа и Свойства измените значения свойства Text для каждого имени элемента управления Button согласно следующему списку:
    • для элемента управления sevenButton замените свойство текста на 7;
    • для элемента управления eightButton замените свойство текста на 8;
    • для элемента управления nineButton замените свойство текста на 9;
    • для элемента управления divisionButton замените свойство текста на / (косая черта);
    • для элемента управления clearButton замените свойство текста на Clear;
    • для элемента управления fourButton замените свойство текста на 4;
    • для элемента управления fiveButton замените свойство текста на 5;
    • для элемента управления sixButton замените свойство текста на 6;
    • для элемента управления multiplicationButton замените свойство текста на * (звездочка);
    • для элемента управления oneButton замените свойство текста на 1;
    • для элемента управления twoButton замените свойство текста на 2;
    • для элемента управления threeButton замените свойство текста на 3;
    • для элемента управления subtractionButton замените свойство текста на (дефис);
    • для элемента управления equalsButton замените свойство текста на = (знак равенства);
    • для элемента управления zeroButton замените свойство текста на 0;
    • для элемента управления changeSignButton замените свойство текста на +/-;
    • для элемента управления decimalButton замените свойство текста на . (точка);
    • для элемента управления additionButton замените свойство текста на + (знак «плюс»);
  5. На поверхности конструктора выберите все элементы управления Button , удерживая нажатой клавишу SHIFT.
  6. В окне Свойства разверните узел свойства Font . Задайте значение 14 для Size и true для Bold у всех элементов управления Button .

Этот набор инструкций завершает проектирование элемента управления DemoCalculator. Остается только добавить логику калькулятора.

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

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

  1. На поверхности конструктора выберите все элементы управления Button , удерживая нажатой клавишу SHIFT.
  2. Выберите один из элементов управления Button . В редакторе кода откроются обработчики событий, созданные конструктором.

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

Поскольку элемент управления DemoCalculator наследуется от класса UserControl, его поведение можно проверить с помощью Контейнера для тестирования пользовательских элементов управления. Дополнительные сведения см. в статье «Практическое руководство. Тестирование поведения во время выполнения userControl».

  1. Нажмите клавишу F5, чтобы собрать и запустить элемент управления DemoCalculator в Контейнере для тестирования пользовательских элементов управления.
  2. Выберите границу между панелями SplitContainer и перетащите ее влево и вправо. Размеры элемента TableLayoutPanel и всех его дочерних элементов управления будут изменяться в соответствии с доступным пространством.
  3. После завершения тестирования элемента управления нажмите кнопку «Закрыть«.

Использование элемента управления в форме

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

Создание проекта

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

  1. Создайте проект Приложение Windows Forms с именем DemoCalculatorTest.
  2. В Обозревателе решений щелкните правой кнопкой мыши проект DemoCalculatorTest и выберите Добавить>Ссылка на проект, чтобы открыть диалоговое окно Диспетчер ссылок.
  3. Перейдите на вкладку Проекты и выберите проект DemoCalculatorLib, чтобы добавить ссылку на тестовый проект.
  4. В обозревателе решений щелкните правой кнопкой мыши DemoCalculatorTest и выберите пункт Назначить запускаемым проектом.
  5. В конструкторе Windows Forms увеличьте размер формы примерно до 700 x 500.

Использование элемента управления в макете формы

Чтобы использовать элемент управления DemoCalculator в приложении, его необходимо поместить в форму.

  1. На панели элементов разверните узел Компоненты DemoCalculatorLib.
  2. Перетащите элемент управления DemoCalculator с панели элементов в форму. Переместите элемент управления в левый верхний угол формы. Когда элемент управления близок к границам формы, отрезки отображаются. Линии привязки указывают расстояние свойства Padding формы и свойства Margin элемента управления. Поместите элемент управления в расположение, указанное линиями привязки. Дополнительные сведения см. в пошаговом руководстве. Упорядочение элементов управления с помощью линий оснастки.
  3. Перетащите элемент управления Button с панели элементов и поместите его в форму.
  4. Перемещайте элемент управления Button по элементу управления DemoCalculator, чтобы определить, где отображаются линии привязки. Вы можете точно и легко выровнять элементы управления с помощью этой функции. По завершении удалите элемент управления Button .
  5. Щелкните правой кнопкой мыши элемент управления DemoCalculator и выберите пункт Свойства.
  6. Замените значение свойства Dock на Fill .
  7. Выберите форму, а затем разверните узел свойства Padding . Замените значение Все на 20. Размер элемента управления DemoCalculator уменьшится в соответствии с новым значением формы Padding .
  8. Измените размер формы, перетаскивая различные маркеры изменения размера в разные положения. Обратите внимание на то, как размер элемента управления DemoCalculator пропорционально изменяется.

Следующие шаги

В этой статье было показано, как создать пользовательский интерфейс для простого калькулятора. Чтобы продолжить, вы можете расширить свою функциональность, реализуя логику калькулятора, а затем опубликовать приложение с помощью ClickOnce. Кроме того, перейдите к другому руководству, в котором вы создаете средство просмотра рисунков с помощью Windows Forms.

См. также

  • Элементы управления Windows Forms
  • Специальные возможности для элементов управления в Windows Forms
  • Публикация с помощью ClickOnce

Создание конструктора в Visual Studio

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Область применения этого формирования кода:

Что? Вы можете немедленно создавать код для нового конструктора в классе.

Когда? Вы представляете новый конструктор и можете настроить соответствующее автоматическое объявление о нем. Или вы можете изменить существующий конструктор.

Зачем? Вы можете объявить конструктор до его использования. Но этот компонент автоматически создаст его с соответствующими параметрами. Кроме того, изменение существующего конструктора требует обновления всех мест вызова, пока этот компонент не обновит их автоматически.

Как? Конструктор можно создать несколькими способами:

  • создание конструктора и выбор элементов;
  • создание конструктора со свойствами;
  • создание конструктора из выбранных полей;
  • создание конструктора в результате нового использования;
  • добавление параметра в существующий конструктор;
  • создание и инициализация поля и (или) параметра из параметра конструктора;

создание конструктора и выбор элементов (только C#).

  1. Поместите курсор в любую пустую строку в классе: Cursor in empty line
  2. Затем выполните одно из следующих действий.
    • Клавиатура
      • Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
    • Мышь
      • Щелкните правой кнопкой мыши и выберите меню Быстрые действия и рефакторинг.
      • Щелкните значок , который отображается в левом поле, если текстовый курсор уже находится в пустой строке класса.

Screenshot of the Generate constructor option.

Pick members dialog

  • Выберите Создать конструктор в раскрывающемся меню. Откроется диалоговое окно Выбор элементов.
  • Выберите элементы, которые требуется включить в качестве параметров конструктора. Можно упорядочить их с помощью стрелок вверх и вниз. Выберите OK.

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

    Screenshot showing that constructor is created with the specified parameters.

    Конструктор создается с учетом указанных параметров.

    Создание конструктора со свойствами (только C#)

    Screenshot of the Generate constructor in Key (with properties) option.

    1. Поместите курсор на экземпляр.
    2. Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
    3. Выберите Создать конструктор в (со свойствами).

    Создание конструктора из выбранных полей (только C#)

    1. Выделите элементы, которые вы хотите добавить в созданный конструктор: Highlight members
    2. Затем выполните одно из следующих действий.
      • Клавиатура
        • Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
      • Мышь
        • Щелкните правой кнопкой мыши и выберите меню Быстрые действия и рефакторинг.
        • Щелкните значок , который отображается в левом поле, если текстовый курсор уже находится в строке выбора элементов.

    Screenshot of the Generate constructor Person string string option.

    Screenshot showing that the constructor is created with the selected parameters.

  • Выберите Создать конструктор «TypeName(. )» в раскрывающемся меню. Конструктор создается с учетом выбранных параметров.
  • Создание конструктора из нового использования (C# и Visual Basic)

    1. Поместите курсор в строку с красной волнистой линией. Она указывает вызов несуществующего конструктора.
      • C#: Highlighted code C#
      • Visual Basic: Highlighted code VB
    2. Затем выполните одно из следующих действий.
      • Клавиатура
        • Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
      • Мышь
        • Щелкните правой кнопкой мыши и выберите меню Быстрые действия и рефакторинг.
        • Наведите указатель мыши на красную волнистую линию и щелкните появившийся значок .
        • Щелкните появившийся значок , который отображается в левом поле, если текстовый курсор уже находится в строке выбора с красной волнистой линией.

    Screenshot of the Generate constructor in Person option.

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

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

    • C#: Generate method result C#
    • Visual Basic: Generate method result VB

    Добавление параметра в существующий конструктор (только C#)

    1. Добавьте параметр в вызов существующего конструктора.
    2. Поместите курсор в строку с красной волнистой линией. Она указывает, что вы использовали конструктор, который еще не существует. Screenshot showing the line where there is a red squiggle.
    3. Затем выполните одно из следующих действий.
      • Клавиатура
        • Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
      • Мышь
        • Щелкните правой кнопкой мыши и выберите меню Быстрые действия и рефакторинг.
        • Наведите указатель мыши на красную волнистую линию и щелкните появившийся значок .
        • Щелкните появившийся значок , который отображается в левом поле, если текстовый курсор уже находится в строке выбора с красной волнистой линией.

    Screenshot of the Add parameter to Person string string option.

    Screenshot showing that the parameter is added to the constructor, with its type inferred from its usage.

  • Выберите Добавить параметр в «TypeName(. )» в раскрывающемся меню. Параметр добавляется в конструктор с учетом типа, который выведен из его использования.
  • Вы также можете добавить параметр к существующему методу. Дополнительные сведения см. в статье Добавление параметра в метод.

    Создание и инициализация поля или свойства из параметра конструктора (только C#)

    1. Найдите существующий конструктор и добавьте параметр: Screenshot showing an existing constructor.
    2. Поместите курсор внутри добавленного параметра.
    3. Затем выполните одно из следующих действий.
      • Клавиатура
        • Нажмите CTRL+., чтобы открыть меню Быстрые действия и рефакторинг.
      • Мышь
        • Щелкните правой кнопкой мыши и выберите меню Быстрые действия и рефакторинг.
        • Щелкните значок , который отображается в левом поле, если текстовый курсор уже находится в строке выбора с добавленным параметром.

    Screenshot of the Create and initialize property Age option.

    Screenshot showing that the field or property is declared and automatically named to match your types.

  • Выберите Создать и инициализировать свойство или Создать и инициализировать поле в раскрывающемся меню. Свойство или поле объявляется и автоматически называется в соответствии с вашими типами. Также добавляется строка кода для инициализации поля или свойства в теле конструктора.
  • См. также

    • Создание кода
    • Просмотр изменений

    Как открыть окно редактора visual basic из формы в режиме конструктора для обработки события

    Пошаговое руководство. Обработка событий (Visual Basic)

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

    В Widget примере класса используются традиционные инструкции по обработке событий. Visual Basic предоставляет другие методы для работы с событиями. В качестве упражнения можно изменить этот пример для использования AddHandler инструкций и Handles .

    Для управления событием PercentDone класса Widget

    Поместите следующий код в Form1 :

    WithEvents Ключевое слово указывает, что переменная mWidget используется для управления событиями объекта. Тип объекта указывается путем указания имени класса, из которого будет создан объект.

    Переменная mWidget объявлена в Form1 , поскольку WithEvents переменные должны быть уровня класса. Это справедливо независимо от типа класса, в котором они размещены.

    Переменная mblnCancel используется для отмены LongTask метода.

    Написание кода для обработчика события

    Как только вы объявили переменную с помощью WithEvents , имя переменной отображается в левом раскрывающемся списке WithEvents класса. При выборе mWidget Widget в правом раскрывающемся списке отображаются события класса. При выборе события отображается соответствующая процедура события с префиксом mWidget и символом подчеркивания. Всем процедурам события, связанным с WithEvents переменной, присваивается имя переменной в виде префикса.

    Чтобы обработать событие

    Выберите mWidget из левого раскрывающегося списка в mWidget .

    PercentDone Выберите событие из правого раскрывающегося списка. Редактор кода открывает процедуру события.

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

    Добавьте следующий код в обработчик событий mWidget_PercentDone .

    PercentDone При каждом возникновении события процедура события отображает процент завершения в Label элементе управления. DoEvents Метод позволяет перекрасить метку, а также дает пользователю возможность нажать кнопку DoEvents .

    Добавьте следующий код для Button2_Click обработчика событий:

    Если пользователь нажимает кнопку Отмена во время выполнения, Button2_Click событие выполняется сразу же после того DoEvents , как инструкция допускает обработку события. Переменной mblnCancel уровня класса присваивается значение True , а mWidget_PercentDone затем событие проверяется и присваивает ByRef Cancel аргументу True значение.

    Подключение переменной WithEvents к объекту

    Form1 теперь настроен на обработку Widget событий объекта. Все, что остается, — найти Widget кое-что.

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

    Создание объекта и присвоение ему ссылки

    Выберите (события Form1) в левом раскрывающемся списке в редакторе кода.

    Load Выберите событие из правого раскрывающегося списка. Редактор кода открывает процедуру события.

    Добавьте следующий код для Form1_Load процедуры события, чтобы создать Widget :

    при выполнении этого кода Visual Basic создает Widget объект и подключает его события к процедурам событий, связанным с mWidget . С этого момента каждый раз, когда Widget вызывает PercentDone событие, mWidget_PercentDone выполняется процедура события.

    Вызов метода LongTask

    Добавьте следующий код в обработчик событий Button1_Click .

    LongTask Перед вызовом метода необходимо инициализировать метку, которая отображает процент завершения, а флаг уровня Boolean класса для отмены метода должен иметь значение False .

    LongTask вызывается с длительностью задачи в 12,2 секунд. PercentDone Событие вызывается раз в секунду с каждой третьей стороной. При каждом возникновении mWidget_PercentDone события выполняется процедура события.

    По LongTask завершении mblnCancel проверяется, завершилось ли LongTask нормальное завершение или остановлено, так как mblnCancel было установлено значение True . Процент завершения обновляется только в первом случае.

    Чтобы выполнить программу, выполните следующие действия.

    Нажмите клавишу F5, чтобы перевести проект в режим выполнения.

    Нажмите кнопку запустить задачу . PercentDone При каждом возникновении события метка обновляется в процентах от завершенной задачи.

    Нажмите кнопку Отмена , чтобы остановить задачу. Обратите внимание, что внешний вид кнопки Отмена не меняется сразу же после нажатия. Click Событие не может произойти, My.Application.DoEvents пока инструкция не разрешит обработку событий.

    My.Application.DoEvents Метод не обрабатывает события точно так же, как и форма. Например, в этом пошаговом руководстве необходимо дважды нажать кнопку Отмена . Чтобы форма могла напрямую управлять событиями, можно использовать многопоточность. Дополнительные сведения см. в разделе управляемые потоки.

    Может оказаться полезным запустить программу с помощью F11 и пошаговое выполнение кода. Вы можете ясно видеть, как работает выполнение LongTask , а затем ненадолго Form1 перезапускать каждый раз PercentDone при возникновении события.

    Что произойдет, если при обратном выполнении кода Form1 LongTask метод был вызван повторно? В худшем случае может произойти переполнение стека, если вызывалось каждый раз при LongTask возникновении события.

    Можно присвоить переменной mWidget обработку событий для другого Widget объекта, назначив ссылку на новый Widget объект в mWidget . На самом деле код Button1_Click можно сделать при каждом нажатии кнопки.

    Для управления событиями для другого мини-приложения

    Добавьте следующую строку кода в Button1_Click процедуру, непосредственно перед строкой, которая считывает mWidget.LongTask(12.2, 0.33) :

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

    WithEvents Переменная может содержать только одну ссылку на объект за раз, поэтому при присвоении другому Widget объекту mWidget значения события предыдущего Widget объекта больше не будут обрабатываться. Если mWidget является единственной объектной переменной, содержащей ссылку на старую Widget , объект уничтожается. Если требуется обрабатывать события из нескольких Widget объектов, используйте AddHandler инструкцию для обработки событий из каждого объекта отдельно.

    Можно объявить столько переменных, сколько WithEvents требуется, но массивы WithEvents переменных не поддерживаются.

    Окно редактора кода

    Для того чтобы открыть окно редактора, достаточно открыть любой модуль Access (рис. 13.12).

    Замечание

    Даже в локализованных версиях Access окно редактора кода VBA, а также все другие диалоговые окна, составляющие среду программирования VBA, традиционно не локализуются. Поэтому все рисунки в этом разделе главы, а также экранные термины (названий команд меню, диалоговых окон и т. д.) приводятся в нелокализованном варианте.

    Рис. 13.12. Окно редактора кода VBA

    Обычно в окне редактора используются три панели (три отдельных окна). На самом деле окон может быть и больше и меньше, и скоро вы узнаете обо всех, но на рис. 13.12 показано только расположение основных окон.

    • Project (Панель проекта), располагается в верхнем левом углу редактора. В ней отображается иерархическое дерево модулей приложения. Если это окно неактивно, выполните команду View, Project Explorer либо нажмите комбинацию клавиш +.
    • Properties (Панель свойств), находится под панелью проекта. Она позволяет просматривать и изменять свойства различных входящих в проект объектов, отображаемых на панели проекта. Список свойств может отображаться как в алфавитном порядке, так и по категориям.
    • Code (Панель редактора кода). Это окно занимает большую часть экрана и является «многодокументным», т. е. можно открыть одновременно несколько окон данного типа для разных модулей. Оно представляет собой высокоинтеллектуальный текстовый процессор, существенно облегчающий написание кода VBA.

    Проект приложения состоит из модулей, которые делятся на три категории:

    • Microsoft Access Class Objects (Модули классов Access) — включает все модули форм и отчетов;
    • Modules (Модули) — стандартные модули;
    • Class Modules (Модули классов) — модули пользовательских классов, если они присутствуют в приложении.

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

    В верхней части панели проекта расположены три кнопки:

    • View Code (Просмотр кода). При нажатии этой кнопки указатель мыши перемещается в окно кода, в котором отображается код выделенного в иерархии проекта объекта.
    • View Object (Просмотр объекта). Эта кнопка доступна только когда в дереве проекта выделен модуль формы или отчета. Тогда она позволяет быстро переключиться на соответствующий модулю объект, т. е. в окно Конструктора формы или отчета.
    • Toogle Folders (Переключение видов представления дерева). При нажатой кнопке все элементы в дереве проекта группируются в папках по категориям, при отжатой — они отображаются в алфавитном порядке..

    Панель свойств позволяет просматривать и изменять свойства различных объектов, входящих в проект. Для отображения свойств объекта его нужно выделить либо в дереве проекта, либо в окне Конструктора формы (отчета). Во многом эта панель дублирует диалоговое окно Свойства (Properties) в формах и отчетах. И в том и в другом случае изменение свойств объекта статично, поэтому они могут быть использованы для задания начальных или постоянных свойств объекта.

    Чтобы изменить значение свойства объекта, необходимо:

    1. Выделить имя свойства в левой колонке.
    2. Изменить значение в правой колонке, либо введя его вручную, либо путем выбора из списка.

    Для каждого модуля, выбранного на панели проекта, открывается свое окно редактора кода. В данном случае в окне редактора мы видим модуль «Заставка» (Startup) приложения «Борей» (рис. 13.13).

    Код в каждом модуле состоит из разделов, переключение между которыми выполняется путем выбора значения из списка Object (Объект), который размещается в левом верхнем углу окна. Список разделов различается для разных типов модулей.

    Для модуля формы этот список включает раздел General (Общая область), который содержит объявления переменных, констант, специальных типов, внешних процедур. Данный раздел открывается по умолчанию при открытии окна кода. Для стандартного модуля этот раздел единственный — он содержит описание всех процедур. Модуль класса имеет разделы General и Class. Модуль формы, кроме раздела General, содержит раздел самой формы и разделы для каждого элемента управления. Модуль отчета включает в себя раздел для объекта Report (Отчет) и разделы для каждой области отчета. Для полей отчета не определены события, поэтому отсутствуют и соответствующие разделы в модуле кода.

    Рис. 13.13. Стандартный модуль в окне редактора

    Каждый раздел может содержать несколько процедур, выбираемых из списка Procedure в правом верхнем углу окна на рис. 13.13. Список процедур в стандартном модуле содержит Declarations (Описания) и имена всех процедур модуля в алфавитном порядке. Список процедур для модуля формы включает в себя перечень всех событий формы и ее элементов. Для модуля класса список процедур содержит только две процедуры для событий класса: Initialize и Terminate.

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

    • Procedure View (Представление процедуры), когда в окне отображается только одна выбранная процедура.
    • Full Module View (Представление полного модуля), когда в окне отображается сразу несколько процедур, отделенных друг от друга тонкой линией.

    Для настройки параметров редактора используется также диалоговое окно Options (Параметры), которое можно открыть, выбрав команду Options в меню Tools (Сервис) (рис. 13.14). Это окно описывает только параметры редактора кода и вызывается из среды редактора кода.

    Рис. 13.14. Диалоговое окно параметров редактора кода

    Оно содержит четыре вкладки.

    Первая вкладка Editor (Редактор) состоит из двух групп параметров: Code Settings и Window Settings.

    • Группа Code Settings (Программирование) содержит шесть флажков, которые позволяют включать и отключать интеллектуальные функции редактора, такие как автоотступ, автоматическая проверка синтаксиса, подсказки при написании пользователем программ.
    • Группа Window Settings (Параметры окна) включает в себя три флажка, влияющих на представление кода в окне редактора. Эти флажки позволяют переключаться между представлениями полного модуля и процедуры, выводить или не выводить на экран тонкие линии, разделяющие процедуры, включать или отключать функцию перетаскивания текста, т. е. перемещения выделенного фрагмента кода с помощью мыши.

    Вторая вкладка Editor Format (Формат редактора) позволяет определить шрифт, его размер и цвет для разных областей текста. Открыв любой модуль, вы можете убедиться, что текст программ представлен несколькими цветами: по умолчанию комментарии выделяются зеленым цветом, ключевые слова — синим. При отладке программ используются и другие цветовые выделения фрагментов текста: точек останова, текущей команды и т. д. Все эти способы выделения могут быть настроены в соответствии с вашим вкусом в данном окне.

    Третья вкладка General (Общая) содержит несколько групп переключателей и флажков.

    • Группа Form Grid Setting относится к созданию форм в Microsoft Visual Basic 6.0 и в других компонентах Office и не используется в Access.
    • Флажок Show ToolTips позволяет включить или отключить вывод всплывающих подсказок для кнопок на панели инструментов.
    • Флажок Collapse Proj. Hides Windows определяет, будет ли скрываться окно редактора при закрытии проекта на панели проекта.
    • Флажок Notify Before State Loss определяет, получит ли пользователь сообщение о том, что предпринимаемое действие вызовет потерю состояния текущего проекта.
    • Переключатели Error Trapping определяют установки по умолчанию, используемые при обработке ошибок в программах:
      • Break on All Errors — любая ошибка, независимо от того, обрабатывается ли она программой, приведет к прерыванию выполнения программы;
      • Break in Class Module — любая необработанная ошибка в модулях класса приведет к прерыванию выполнения программы;
      • Break on Unhandled Errors — прерывание программы вызывают все необработанные ошибки.

      Последняя группа флажков определяет, когда компилируются модули проекта:

      • Compile On Demand — определяет, будут ли все модули проекта компилироваться перед началом работы или только по требованию, в первом случае запуск приложения будет более длительным;
      • Background Compile — определяет, будет ли компиляция модулей выполняться в фоновом режиме.

      На последней вкладке Docking находятся флажки, позволяющие закрепить положение основных окон на экране.

      Для того чтобы убедиться, что наши утверждения об интеллектуальности редактора не являются голословными, достаточно попробовать написать даже самую простую программу. Давайте заменим в форме «Клиенты» (Customers) макрос, который открывает форму «Заказы» (Orders) при нажатии кнопки Заказы клиента, процедурой VBA, которая выполняет те же действия. Мы создавали такой макрос в разд. «Назначение макроса событию»гл. 11. Если вы этого не делали, тогда создайте сейчас командную кнопку в области заголовка окна и назовите ее «Заказы клиента» (кнопка Мастера на панели элементов при этом должна быть отжата).

      После этого нажмите кнопку Программа (Code) на панели инструментов. Откроется редактор кода VBA, который по умолчанию попытается создать процедуру обработки события Load формы. Выберите из списка слева объект Заказы клиента. Редактор автоматически вставит заголовок и концовку процедуры обработки события Click (рис. 13.15). Открыв список справа, вы можете увидеть, как много различных событий связано с командной кнопкой, однако наиболее часто используется именно событие Click. Так как с этим событием сейчас не связано никакой процедуры, редактор сразу пытается ее создать.

      Начнем писать текст процедуры. Процедура будет состоять из нескольких команд. Нам необходимо открыть форму «Заказы» (Orders) и показать в этой форме только те заказы, которые относятся к определенному клиенту, поэтому придется задать условие для отбора записей в форме «Заказы» (Orders). Обычно для этого используют переменную типа string, которой сначала присваивают нужное значение, а потом подставляют в качестве параметра в макрокоманду Открытьформу (OpenForm). Чтобы использовать такую переменную, ее сначала нужно описать, поэтому первое предложение в процедуре должно быть следующим:

      Dim stLinkCriteria As String

      Рис. 13.15. Создание процедуры обработки события

      Как только вы напишете первые три слова Dim stLinkCriteria As, на экране появится список слов (рис. 13.16), которые могут быть использованы в данном предложении.

      Рис. 13.16. Автоматический вывод списка компонентов

      Вы набираете следующие буквы — str, после чего курсор в списке устанавливается на слове string. Дальше можно не продолжать, а просто нажать клавишу — конец слова допишется автоматически. Нажмите клавишу , курсор перейдет на новую строку, а текст во введенной строке изменится: все ключевые слова — Dim, As, string — будут выделены синим цветом. При вводе ключевых слов можно не беспокоиться о том, чтобы слово начиналось с заглавной буквы. Вы можете набирать весь текст строчными буквами — необходимое преобразование будет выполняться автоматически. Но, конечно, названия переменных, элементов управления и других объектов, на которые имеются ссылки в тексте, вы должны вводить сами с использованием нужного регистра, т. к. в них преобразования выполняться не будут.

      Следующая строка будет присваивать переменной strLinkCriteria значение: stLinkCriteria = «[КодКлиента]=» & «’» & Me![КодКлиента] & «’»

      Две формы будут связаны по значению поля CustomerID. Первое выражение [КодКлиента] относится к форме «Заказы» (Orders), а второе значение Me! [КодКлиента] — к текущей форме «Клиенты» (Customers), о чем говорит слово Me. Теперь используем макрокоманду Открыть форму (OpenForm) для того, чтобы открыть форму «Заказы» (Orders). Как только набирается docmd, появляется новая подсказка — список макрокоманд (рис. 13.17).

      Рис. 13.17. Автоматический вывод методов объекта

      Уже известным способом выбираем нужную макрокоманду, нажимаем пробел и опять подсказка — синтаксис макрокоманды Открыть форму (OpenForm) (рис. 13.18).

      Рис. 13.18. Автоматический вывод кратких сведений

      И это очень кстати, т. к. позволяет не запоминать все аргументы макрокоманды и порядок их следования. Введите имя формы: Заказы (Orders), запятую, и опять появится подсказка с именами возможных констант, которые могут быть указаны в следующем параметре. Выберите константу acNormal и продолжайте ввод. Должна получиться строка:

      DoCmd.OpenForm «Заказы», acNormal, , stLinkCriteria

      Две следующие подряд запятые говорят о пропущенном параметре — имя фильтра.

      Теперь добавим еще одну команду — изменим заголовок формы:

      Forms!Заказы.Caption = «Заказ» & Название

      И наконец, напишем комментарий, который объясняет, что делает данная программа. Для этого поместите курсор в начало второй строки программы и нажмите клавишу . Появится пустая строка. Введите символ (‘) в начало новой строки и пишите дальше текст комментария. Закончите ввод нажатием клавиши , и вы увидите, что комментарий оказался выделен зеленым цветом. В целом текст программы должен выглядеть как на рис. 13.19.

      Рис. 13.19. Программа открытия формы «Заказы»

      На примере этой простой программы мы продемонстрировали три очень полезных свойства редактора.

      • Автоматическая проверка синтаксиса — ввод команды успешен и все слова выделяются нужным цветом, только когда синтаксис предложения правилен, в противном случае вы услышите звуковой сигнал, текст будет выделен красным цветом и появится сообщение об ошибке.
      • Автоматический вывод списка компонентовAuto List Members позволяет избежать ошибок при вводе наименований свойств объектов, встроенных констант, типов переменных. Особенно эта функция полезна при установке свойств, т. к. позволяет не только вспомнить правильное имя свойства, но и увидеть, какие свойства объекта доступны в данный момент.
      • Автоматический вывод кратких сведенииAuto Quick Info показывает в виде всплывающей подсказки синтаксис встроенных функций и макрокоманд. По мере ввода параметров очередной параметр выделяется в подсказке жирным шрифтом.

      Когда вы уже усвоите язык VBA, такие подсказки могут показаться вам навязчивыми. Тогда вы можете отключить их, сбросив соответствующие флажки в диалоговом окне Options (Параметры) редактора кода (вкладка Editor).

      Однако при необходимости вы легко получите требуемую помощь, если воспользуетесь контекстным меню редактора кода (рис. 13.20).

      Рис. 13.20. Контекстное меню редактора кода

      Кроме описанных выше функций, в контекстном меню присутствуют и другие очень полезные функции, способствующие быстрому написанию кода, — List Constants, Parameter Info, Complete Word, а также две команды, очень упрощающие навигацию среди программных модулей:

      • Definition. Если в процедуре выполняется вызов другой процедуры, то, установив курсор на имя вызываемой процедуры и выбрав из контекстного меню команду Definition (а еще быстрее, нажав комбинацию клавиш +), вы сразу попадете в тело вызываемой процедуры;
      • Last Position — позволяет после такого перехода вернуться обратно.

      Команда Definition позволяет также быстро открыть окно Object Browser и посмотреть описание нужного свойства, метода или объекта приложения. Для этого нужно установить курсор на интересующий объект, свойство, метод и нажать комбинацию клавиш +.

      Написание процедур обработки событий на visual basic for application

      Цель работы: изучить основные принципы написания программ на VBA, создать форму для удаления и добавления полей в таблицы БД «Библиотека» на основе применения полученных знаний.

      Краткие теоретические сведения

      Visual Basic for Applications представляет собой полуфункциональный язык программирования, являющийся неотъемлемой составной частью Access. Этот язык используется для разработки приложений, предназначенных для манипулирования БД и для настройки пользовательского интерфейса. VBA – это структурированный язык программирования высокого уровня. В нем, как и в других языках, есть операторы проверки условий, циклического выполнения повторяющихся операций, а также обмена данными с памятью и дисками. В языке VBA реализованы общие принципы объектно-ориентированного программирования. Это означает, что пользовательская среда, управляемая приложением, не подвергается изменениям путем выполнения последовательности процедур и операторов, но реагирует на события, связанные с различными объектами: полями ввода, кнопками, разделами форм и отчетов. В языке VBA программный код привязан непосредственно к объектам и срабатывает тогда, когда случается определенное событие. Все программирование в Windows основано именно на отклике на то или иное событие в системе.

      Создание кода VBA с помощью Мастеров элементов управления. Одним из эффективных способов использования VBA является привязка кода к кнопкам, добавляемым в форму с помощью Мастеров элементов управления. Чтобы добавить кнопку с фрагментом кода, а затем просмотреть код, необходимо выполнить следующее:

      1. Открыть БД «Библиотека».

      2. Выбрать таблицу и выполнить щелчок на кнопке «Автоформа» стандартной панели инструментов. Для таблицы будет создана форма по умолчанию.

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

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

      5. Выбрать в меню «Вид» команду «Панель элементов», если панель элементов не отображена на экране.

      6. Выполнить щелчок на элементе «Кнопка».

      7. Выполнить щелчок на свободном месте формы, чтобы вставить в нее кнопку. При этом откроется диалоговое окно Мастера кнопок, показанное на рис. 14.

      Рис. 14. Окно мастера создания кнопок

      8. В списке «Категории» выбрать пункт «Переходы по записям», а затем в списке «Действия ®Найти далее» После щелчка по кнопке «Готово» в форму будет добавлена кнопка, выполняющая поиск.

      9. Выполнить щелчок по элементу «Кнопка».

      10. Вставить кнопку на свободном месте формы ниже предыдущей, созданной ранее. Снова откроется окно кнопок.

      11. В списке «Категории» выбрать пункт «Работа с формой», а в списке «Действия» – пункт «Закрытие формы». После щелчка по кнопке «Готово» в форму будет добавлена кнопка, выполняющая закрытие формы.

      12. Сохранить форму, выбрав команду «Файл ® Сохранить». После этого можно запустить форму и проверить работу добавленных кнопок.

      13. Переключиться в режим Конструктора, выполнив щелчок по кнопке «Конструктор». Выбрать команду «Вид ® Программа» или выполнить щелчок по кнопке «Программа» на панели инструментов. Откроется окно редактора Visual Basic for Applications, представленное на рис. 15.

      vba2

      Рис. 15. Окно редактирования программных модулей

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

      Первый раздел начинается с заголовка процедуры:

      Private Sub Кнопка13_Click ()

      Заканчивается процедура оператором: End Sub. Операторы, заключенные между ними, выполняются после щелчка по кнопке «Найти». Основная часть работы выполняется следующим оператором:

      DoCmd. DoMenuItem acFormBar, AcEditMenu, 10, AcMenuVer70

      Этот оператор выполняет те же действия, что и команда меню «Правка ®Найти», т. е. выводит на экран диалоговое окно «Поиск в поле», с помощью которого можно выполнить поиск.

      Открыв модуль VBA, его можно редактировать как текст в любом текстовом редакторе. В окне редактора Visual Basic в код можно вставить текст из другого файла. Для этого выбрать команду «Вставка ® Файл», а в открывшемся диалоговом окне выбрать нужный файл и выполнить щелчок по кнопке «ОК».

      Модули на языке Visual Basic можно выводить на печать. Для этого следует открыть модуль и выбрать команду «Файл ® Печать».

      Модуль является структурным элементом программы, написанной на языке VBA. Это совокупность объявлений и процедур, объединенных в единое целое. Существуют модули трех типов: стандартные модули, модули формы и модули отчетов. В отличие от стандартного модуля, который создается таким же образом, как и любой другой объект БД, и может выполнять практически любые вычисления, модули форм и отчетов разрабатываются для обработки событий, связанных с элементами формы или отчета.

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

      Процедуры делятся на две категории: процедуры-подпрограммы (подпрограммы) и процедуры-функции (функции).

      Процедура–подпрограмма активизируется при обращении к ней по имени, вследствие чего выполняется определенная последовательность операторов (инструкций). Подпрограмму используют, например, для задания свойства формы или заполнения списка значениями, полученными в результате вычислений.

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

      Процедурой называется целостная структурная единица кода на языке VBA. Каждая процедура состоит из операторов, в которых применяются встроенные в Access функции, методы и свойства, предназначенные для выполнения каких-либо операций над данными. Например, к свойству Click кнопки «Найти» приведенного ранее примера привязана следующая процедура:

      Private Sub Command6_Click ( )

      On Error GoTo Err_Command6_Click

      Screen. PreviosControl. SetFocus

      DoCmd. DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

      MsgBox Err. Descrition

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

      Теоретически каждая процедура может быть вызвана из любого модуля, а функция – из таких объектов, как форма, запрос или отчет. Наряду с общедоступными процедурами (Public), которыми являются все процедуры по умолчанию, существуют локальные, или личные, процедуры (Private), доступные только в том модуле, в котором они описаны.

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

      Создание процедур обработки событий. Начинающим разработчикам приложений Access понадобится набор процедур для отклика на различные события, например, внесение изменений в поле или щелчок на кнопке. Код процедуры обработки события привязывается к событию, которое может произойти при работе с формой, отчетом или элементом управления. Результат выполнения процедуры-функции обычно применяется:

      В качестве значения по умолчанию для поля таблицы;

      В качестве значения критерия для запросов или фильтров;

      В качестве содержимого поля.

      Хотя конкретный вид процедуры зависит от события и желаемого отклика, можно предложить общую последовательность действий по созданию процедуры обработки события:

      1. Открыть нужную форму или отчет в режиме Конструктора. Если необходимо привязать процедуру к элементу управления, выбрать этот элемент.

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

      3. Открыть вкладку «События».

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

      5. Выполнить щелчок по кнопке с тремя точками, чтобы открыть диалоговое окно «Построитель».

      6. В этом окне выполнить двойной щелчок мышью на строке «Программы». Откроется окно редактора Visual Basic, в котором автоматически появится начальная и конечная строки процедуры.

      7. Ввести операторы, образующие код процедуры.

      Для повышения удобочитаемости кода процедуры, вводимого между ограничительными операторами, применяют приемы структурирования. Один из таких приемов заключается в том, что все операторы процедуры записываются с отступом от начала строки. Для создания отступа можно использовать клавишу «Tab». По умолчанию позиции табуляции установлены через четыре символа. Отступы образуются и посредством команды «Увеличить отступ» из меню «Правка». В результате активизации этой команды строка смещается вправо на то количество символов, которое указано в поле интервал табуляции. Команда «Уменьшить отступ» служит для выполнения противоположного действия.

      Посредством отступов выделяют вложенные циклы и условные операторы внутри процедуры.

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

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

      При перемещении курсора из строки кода программа автоматически проверяет синтаксис этой строки и в случае обнаружения ошибки выводит на экран соответствующее сообщение. Для отказа от такой проверки следует выключить опцию проверка синтаксиса на вкладке «Модуль» диалогового окна «Параметры».

      Для быстрого поиска и замены фрагментов кода применяются команды «Найти» и «Заменить» из меню «Правка».

      В Access при редактировании фрагментов кодов кроме общепринятых используются дополнительные комбинации клавиш: Ctrl+Y позволяет вставить в буфер строку, в которой находится курсор, не выполняя его маркировку; F3 и Shift + F3 позволяют просмотреть все фрагменты модуля, в которых встречается искомая последовательность символов. F3 дублирует команду «Найти далее» из меню «Правка» и кнопку «Найти далее» окна поиска.

      Аргументы процедуры. Благодаря аргументам пользователь имеет возможность управлять выполнением процедуры. При описании процедуры, зависящей от аргументов, имя аргумента принято вводить в скобках за именем процедуры в строке с ключевым словом Function/Sub. Например ввод коэффициента при пересчете рублей в доллары:

      Function Рубли_в_Доллары (Коэффициент)

      При вызове такой функции значение аргумента указывается в скобках после имени функции. Например:

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

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

      Переменные могут создаваться автоматически, по мере появления в процедуре (неявное объявление). По умолчанию неявно объявленные переменные имеют тип Variant. Внутри такой переменной кроме значения хранится индикатор типа значения.

      Неявное объявление типа допустимо только в случае отсутствия оператора Option Explicit в области описания модуля. Чтобы при создании нового модуля предотвратить появление этого оператора в области описания, следует отключить опцию «Явное описание переменных» на вкладке «Модуль» диалогового окна «Параметры».

      Рекомендуется описывать все переменные явно, это позволит избежать ошибок, связанных с преобразованием типов данных. Явное описание типа производится оператором Dim, после которого указывается имя переменной и ее тип. Если при явном объявлении переменной не указан тип данных, а задано только имя переменной то будет создана переменная типа Variant, которой можно присваивать цепочки символов, числа с плавающей точкой, значения даты и времени. Access однозначно идентифицирует присваиваемые значения, поскольку наряду с ними он хранит в переменной и признак типа.

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

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

      При объявлении переменной следует помнить об области действия. Переменные, объявленные в процедуре, можно использовать только внутри этой процедуры. Если переменная должна быть доступна во всех процедурах одного модуля, ее необходимо объявить в области описания модуля. Здесь также можно применять оператор Dim. Наибольшую область действия имеет переменная, объявленная глобальной (с префиксом Global) в области описания модуля. Синтаксис оператора Global не отличается от синтаксиса оператора Dim.

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

      Const Число_Пи = 3.1415926

      Условные операторы. В языке VBA, как и в других языках программирования, основными элементами, управляющими ходом выполнения процедуры, являются условные операторы. Наиболее простой из них – оператор If. . . Then:

      If Полина = «Ж» Then

      Поздравление = «С 8 марта!»

      Если условие, заданное выражением между ключевыми словами If и Then, выполняется, соблюдаются инструкции внутри блока, ограниченного ключевыми словами Then и End if. Иначе операторы между ключевыми словами не выполняются, а Access перейдет к обработке оператора, который следует за ключевыми слова End if. В случае необходимости произвести два различных действия (одно при соблюдении условия, а второе – нет), надлежит воспользоваться полной формой оператора If:

      If выражение Then

      Если условие соблюдается, выполняется Оператор1 (или группа операторов), расположенный между ключевыми словами Then и Else, а если не соблюдается – Оператор2 (или группа операторов), расположенный между ключевыми словами Else и End if.

      Однако не всегда возможны два варианта решения. Учитывая это, VBA предоставляет в распоряжение пользователей оператор Select Case, предназначенный для выбора одного из множеств вариантов решений:

      Select Case Город

      Print «Я не знаю такого города!»

      При выполнении этого оператора проверяется значение переменной «Город». В зависимости от результата проверки переменной «Код_МГТС» присваивается телефонной код некоторого города. Если значение переменной «Город» не совпадает ни с одним из значений, перечисленных в строках с ключевым словом Case, производится действие, указанное между ключевыми словами Case Else и End Select.

      Операторы цикла. Цикл используется для многократного повторения одной или нескольких инструкций. Количество повторений цикла связано с некоторым условием. В VBA предусмотрено несколько разновидностей циклов. Простейшим примером циклической конструкции является так называемый цикл по счетчику:

      For Счетчик = 1 To 10

      Цикл по счетчику ограничивается ключевыми словами For и Next. После ключевого слова For указывается имя переменной, которая будет выполнять роль счетчика, после знака равенства – начальное значение счетчика, а после ключевого слова To – конечное значение счетчика.

      Еще одна разновидность цикла – While-цикл. Условие выполнения команд внутри такого цикла определяется некоторым условным оператором:

      Do While Счетчик <> 10

      Разновидностью цикла Do является Until-цикл, который выполняется, пока условное выражение ложно:

      Do Until Счетчик=10

      Задание к лабораторной работе

      1. Написать программу для добавления полей в таблицу, следуя приведенной ниже методике (в данном примере поля будут добавляться только в таблицу «Книги»):

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

      Б) Выбрать элемент типа «поле» на панели элементов управления для ввода имени добавляемого поля и разместить его в области данных формы.

      В) Далее необходимо изменить свойства этого элемента управления. Правой кнопкой мыши щелкнуть по этому полю и выбрать параметр «Свойства». В качестве имени указать «Field_Name».

      Г) Отредактировать надпись слева от созданного поля ввода. В свойствах изменить подпись на «Название поля:». Для того чтобы подпись вмещалась полностью, в «Свойствах» ширину поля указать равной 2,6 см.

      Д) Теперь следует создать элемент управления, в котором будет содержаться перечень возможных типов для добавляемого поля. Выбрать на панели элементов «Поле со списком» и разместить его в форме. В предложенном списке способов заполнения элементов списка выбрать «Будет введен фиксированный набор значений» и нажать кнопку «Далее». Число столбцов оставить равным единице. В качестве элементов списка указать «Текстовый», «Числовой», «Дата/время». Нажать кнопку «Далее», в качестве подписи указать «Тип поля:» и нажать кнопку «Готово».

      Е) В свойствах созданного поля со списком изменить «Название поля» на «Field_Type».

      Ж) Теперь следует создать кнопку, в которой будет содержаться программа добавления поля. В панели элементов выбрать элемент управления «Кнопка» и разместить ее в форме. Будет предложен список действий, которые должны выполняться при нажатии на данную кнопку. Поскольку в Microsoft Access нет готовых программ для добавления полей, нажать кнопку «Отмена».

      З) Перейти к свойствам созданной кнопки. «Подпись» изменить на «Добавление поля», «Имя» на «Add». В событиях выбрать поле «Нажатие кнопки». Слева от поля появится кнопка с тремя точками. Нажать на нее. В появившемся диалоговом окне выбрать «Программы» и нажать кнопку «ОК». В результате вы перейдете к окну редактирования программных модулей. Оно содержит следующие строки:

      Option Compare Database

      Private Sub Add_Click ()

      Курсор должен находиться после строки «Private Sub Add_Click ()».С этой позиции будем писать программу обработки нажатия кнопки.

      И) Для начала необходимо получить доступ ко всей базе данных в целом и к нужной таблице в частности. Кроме того, потребуется переменная, содержащая информацию о новом поле. Поэтому нужно объявить переменные, необходимые для создания поля:

      Dim dbs As Database, tdf As TableDef, fld As Field

      Переменная dbs имеет тип Database и предназначена для получения указателя на базу данных, tdf имеет тип TableDef – для получения указателя на таблицу, fld имеет тип Field – для получения указателей на поля таблицы.

      К) Установим указатель на текущую базу данных:

      Set dbs = CurrentDb

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

      Л) Установить указатель на таблицу:

      Set tdf = dbs. TableDefs («Книги»)

      Обратите внимание, что после ввода точки после «dbs» был выведен перечень переменных и функций текущей базы данных. Функция TableDefs предназначена для получения указателя на требуемую таблицу из заданной базы данных.

      М) Теперь в зависимости от выбранного типа поля организовать создание нового поля в таблице. Для организации условного перехода внутри программы воспользуемся оператором Select Case:

      Select Case Me. Field_Type. Value

      Set fld=tdf. CreateField (Me. Field_Name, dbText)

      Set fld=tdf. CreateField (Me. Field_Name, dbLong)

      Set fld=tdf. CreateField (Me. Field_Name, dbDate)

      То есть в зависимости от значения поля со списком Field_Type происходит создание поля с выбранным типом. Для создания поля используется метод в CreateField. Созданное поле размещается в переменной «fld». Ключевое слово «Ме.» означает, что следующие за ним поля принадлежат текущей форме.

      Н) Для добавления поля в таблицу воспользуемся командами:

      Tdf. Fields. Append fld

      Tdf. Fields. Refresh

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

      Private Sub Add_Click ()

      Dim dbs As Database, tdf As TableDef, fld As Field

      Set dbs = CurrentDb

      Set tdf = dbs. TableDefs («Книги»)

      Select Case Types. Value

      Set fld = tdf. CreateField (Name, dbText)

      Set fld = tdf. CreateField (Name, dbLong)

      Set fld = tdf. CreateField (Name, dbDate)

      Tdf. Fields. Append fld

      Tdf. Fields. Refresh

      О) После написания программы закрыть текущее окно.

      П) Сохранить форму и открыть ее в обычном режиме.

      Р) Проверить работу программы: в качестве названия поля ввести «Test», в качестве типа указать «Текстовый». Нажать кнопку «Добавление поля», а затем открыть таблицу «Книги» и убедиться в присутствии нового поля «Test».

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

      А) Открыть новую форму в режиме Конструктора.

      Б) Выбрать на панели элементов управления «Список» и разместить его в форме.

      В) Из предлагаемых способов заполнения элементов списка выбрать «Будет введен фиксированный набор значений» и нажать кнопку «Далее». Число столбцов оставить равным единице. В качестве элементов списка указать «Автор», «Название», «Код издательства», «Объем», «Год издания», «Стоимость», «Test». Поле «Код» не добавлять, так как оно является ключевым и не может быть удалено из таблицы. Нажать кнопку «Далее», в качестве подписи указать «Список полей» и нажать кнопку «Готово». При необходимости выровнять размер подписи.

      Г) В свойствах задать списку имя «Fields».

      Д) Создать кнопку, в которой будет содержаться программа удаления поля. На панели элементов выбрать элемент управления «Кнопка» и разместить ее в форме. Вам будет предложен список действий, которые должны выполняться при нажатии на данную кнопку. Поскольку в Microsoft Access нет готовых программ для удаления полей, нажать кнопку «Отмена».

      Е) В свойствах созданной кнопки «Подпись» изменить на «Удаление поля», «Имя» на «Del» и открыть программу обработки события в поле «Нажатие кнопки». Курсор находится после строки «Private Sub Del_Click ()».С этой позиции следует писать программу обработки события «Нажатие кнопки».

      Ж) Переменные, необходимые для создания поля:

      Dim dbs As Database, tdf As TableDef

      З) Указатель на текущую базу данных:

      Set dbs = CurrentDb

      И) Указатель на таблицу:

      Set tdf = dbs. TableDefs («Книги»)

      К) Удаление выбранного поля:

      Tdf. Fields. Delete (Me. Fields. Value)

      Л) Обновление списка полей в таблице:

      Tdf. Fields. Refresh

      М) Программа должна иметь вид:

      Private Sub Del_Click ()

      Dim dbs As Database, tdf As TableDef

      Set dbs = CurrentDb

      Set tdf = dbs. TableDefs («Книги»)

      Tdf. Fields. Delete (Me. Fields. Value)

      Tdf. Fields. Refresh

      Н) Сохранить форму и открыть ее в режиме просмотра.

      О) В качестве примера выбрать созданное нами в предыдущем примере поле «Test» и нажать кнопку «Удаление поля». Список не изменился, но если открыть таблицу «Книги», то можно убедиться, что поле «Test» удалено.

      3. Создать форму (см. рис. 16) , в которой:

      А) Реализовать добавление и удаление любого поля (кроме ключевых) из любой таблицы.

      Б) В качестве возможных типов добавляемых полей должны быть: «Текстовый», «Числовой», «Дата/время», «Денежный», «Логический», «Поле MEMO».

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

      Г) Обеспечить обновление списка полей и поля ввода на форме после добавления/удаления полей в выбранной таблице.

      Д) Перед удалением поля должно предварительно появиться диалоговое окно («Message Box») для подтверждения удаления. Поле удалять только в случае подтверждения удаления.

      Е) Предусмотреть возможность открытия любой таблицы из созданной формы для просмотра внесенных изменений.

      Программирование обработки событий

      Как видно из табл. 10.1, формы и элементы управления могут отвечать на многие события. Но когда форма действительно отвечает на какое-нибудь конкретное событие? Только тогда, когда она имеет соответствующую процедуру для этого события. Процедуры обработки событий должны быть кем-то созданы — в данном случае вами.

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

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

      1. Откройте окно программного кода формы.

      Двойной щелчок на форме или любом ее элементе управления — самый короткий путь для этого. Иначе можно выделить форму и выбрать View=Code из контекстного (вызываемого щелчком правой кнопки мыши) меню для формы или элемента управления, с которыми вы собираетесь работать, или же нажать , когда форма выделена в ее окне UserForm.

      2. В окне программного кода формы выберите объект, для которого вы хотите создать процедуру обработки события.

      Объект выбирается из раскрывающегося списка объектов вверху слева в окне программного кода формы (рис. 10.25).

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

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

      Рис. 10.25. Выбор элемента управления в окне программного кода формы перед началом создания процедуры обработки события

      Как только из раскрывающегося списка процедур будет выбрано событие, VBA немедленно перенесет вас прямо к процедуре его обработки. Если для события еще не создано никакого программного кода, VBA создаст для вас заготовку процедуры, разместив курсор ввода в пустой строке между оператором объявления процедуры и ее завершающим оператором (см. рис. 10.25). Если процедура обработки события уже содержит программный код, VBA просто поместит курсор ввода в его первую строку.

      Вам не стоит беспокоиться об объявлении процедур, так как VBA делает это автоматически, когда вы выбираете событие в окне программного кода

      Рис. 10.26 Только что созданная заготовка процедуры обработки события в окне редактора Visual Basic

      Как влдно из рис. 10.26, синтаксис процедур обработки событий не отличается от синтаксиса обычных процедур типа Sub. Единственное, что отличает процедуру обработки события, так это ее имя. Чтобы процедура обработки события вообще функционировала, ее имя должно состоять из имени объекта (формы или элемента управления), за которым следуют символ подчеркивания и официальное имя события VBA. Посмотрите на следующие примеры:

      Private Sub cmdCalcuiateSquareRoot_Click()

      Private Sub UserForm_Activate()

      Private Sub sclVolumeControl_Change ()

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

      Например, предположим, что вы создали процедуру обработки события Click (Щелчок) для кнопки, которой было автоматически присвоено имя CommandButtonl. Тогда именем процедуры будет CommandButtonl_Click. Спохватившись, вы изменили имя кнопки на более информативное, например cmdВернутьИзКорзины. Но после этого, до тех пор пока вы не измените оригинальное имя процедуры на cmdВернутьИзКорзины_Сliск, соответствующая кнопка во время выполнения будет просто торчать в форме тихо и безответно, независимо от того, сколько раз вы на ней щелкнете.

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

      Читайте также

      Регистрация событий

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

      Обработка событий

      Обработка событий Теперь самое время рассмотреть один ключевой вопрос Web-программирования: события, их возникновение и

      Обработка событий

      Обработка событий Теперь самое время рассмотреть один ключевой вопрос Web-программирования: события, их возникновение и обработка. Понятие события и его обработки Рассматривая примеры Web-сценариев, мы исходили из предположения, что они выполняются при загрузке

      23.3.5. Виджит событий — EventBox

      23.3.5. Виджит событий — EventBox Далеко не все виджиты связаны с окнами. Например, GtkLabel (надпись), GtkTable (контейнер-таблица), GtkHBox (горизонтальный контейнер), GtkVBox (вертикальный контейнер) и некоторые другие с окнами не связаны.Если нужно, чтобы эти виджиты реагировали на

      Журнал событий

      Журнал событий Служба обеспечивает запись сообщений в стандартные журналы Windows (Система, Приложения, Безопасность), просмотреть которые можно при помощи оснастки eventvwr.msc. Далее в этой книге оснастка Просмотр событий (eventvwr.msc) будет описана подробней. Служба Журнал событий

      Просмотр событий

      Просмотр событий С помощью оснастки Просмотр событий реализуется возможность просмотра трех системных журналов Windows XP, каждый их которых содержит сведения о том или ином компоненте компьютера: о приложениях, установленных на нем, о работе системных компонентов и о

      Журнал событий

      Журнал событий С помощью данной политики можно настроить параметры стандартных журналов системы, доступ к которым можно получить с помощью оснастки Просмотр событий. Например, с помощью данной политики можно определить максимальные размеры файлов стандартных журналов

      1.1.9. Обработчики событий

      1.1.9. Обработчики событий Обработчики события методы объекта. Это означает, что они должны быть методами класса, а не обычной процедурой или функцией (первый параметр должен быть Self). Для наиболее употребимых обработчиков предназначен следующий тип:TNotifyEvent = procedure(sender: TObject)

      1.1.10. Сигнализаторы событий

      1.1.10. Сигнализаторы событий Сигнализаторы событий требуются для указания обработчику события, что возникло указанное событие, что бы обработчик события смог бы выполнить свои действия. Сигнализаторы обычно виртуальные или динамические методы класса (подобно методу Click)

      Программирование событий excel

      Программирование событий excel Реакция на вносимые пользователем изменения стала неотъемлемой частью функционирования электронных таблиц, поэтому написание кода для событий в Excel часто играет более значимую роль, нежели в остальных приложениях пакета Office. Изменение

      8.2. Синтаксис планировщика событий

      8.2. Синтаксис планировщика событий MySQL 5.1.6 и позже обеспечивает несколько инструкций SQL для работы с планируемыми событиями:Новые события определены, используя инструкцию CREATE EVENT.Определение существующего события может быть изменено посредством инструкции ALTER EVENT.Когда

      Использование макросов для обработки событий

      Использование макросов для обработки событий Наиболее часто макросы применяются для обработки событий. При этом макрос может функционировать и как самостоятельная программа, и в составе процедуры VBA (Visual Basic for Applications). Первый вариант мы рассмотрим в этом разделе, а

      4.3.2. Планирование событий

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

      Похожие публикации:

      1. Как запустить программу visual basic
      2. Как зафиксировать блок в css
      3. Как стилизовать button в css
      4. Как считывать метки rfid arduino uno

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *