double arrow

Ускоренный способ добавления процедур

Вместо выполнения команды Tools > Add Procedure существует и другой, более быстрый, способ включения процедуры в модуль:

1. Введите текст Public Sub ProcedureName (где ProcedureName — имя вашей процедуры) где-нибудь в пустой строке окна программы.

Кроме того, можно ввести Private Sub ProcedureName для создания закрытой процедуры или просто Sub ProcedureName — такая процедура по умолчанию будет открытой.

2. Нажмите клавишу Enter; Visual Basic автоматически создает шаблон процедуры,

Примерный вид окна программы Visual Basic показан на следующем рисунке.

 

 

 

4 В окне свойств задайте свойству Name только что созданного модуля значение

MyLibrary.

5. Сохраните файл командой File > Save MyLibrary или воспользуйтесь сочетанием

клавиш Ctrl+S. В открывшемся диалоговом окне Save File As сохраните файл в

каталоге Codelib, созданном в предыдущем разделе. Он положит начало вашей

программной библиотеке.

 

Процедуры

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

 

Istltems.Addltem "Widgets"

 

вызывает метод Addltem с аргументом "Widgets" и добавляет эту строку в конец списка. Обратите внимание: аргументы могут относиться практически к любому типу. Конкретный тип зависит от того, как работает данная процедура.

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

Чтобы вы лучше поняли, как написать процедуру и использовать ее в программе, мы создадим процедуру, заменяющую стандартный указатель-стрелку песочными часами. Ее следует вызывать перед тем, как ваша программа займется выполнением какой-нибудь длительной задачи. Указатель в виде песочных часов подскажет пользователю, что программа не «зависла», а делает что-то полезное.

1. Откройте проект из предыдущего раздела, если он не был открыт ранее.

2. Если модуль MyLibrary отсутствует в проекте, добавьте его — для этого следует щелкнуть правой кнопкой мыши в окне проекта и выполнить команду Add > Module из контекстного меню. Когда появится диалоговое окно Add Module, перейдите на вкладку Existing. Затем найдите файл MyLibrary.Bas и нажмите кнопку Open, чтобы включить модуль в проект.

3. Дважды щелкните на файле My Library. Bas в окне проекта. Открывается окно программы.

4. В окне программы введите следующий код:

Public Sub ShowHourglass()

Screen.MousePointer = 11 End Sub

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

5. Добавьте в модуль следующий фрагмент:

 

Private Sub ShowMousePointer()

Screen.MousePointer = 0

End Sub

 

6. Выполните команду File > Save MyLibrary в меню Visual Basic.

Процедуры ShowHourglass и ShowMousePointer пригодятся в тех случаях, когда программа занята, а пользователю приходится ждать ее освобождения. Вызовите ShowHourglass в начале, a ShowMousePointer — в конце периода ожидания, например:

 

ShowHourglass

IndexLargeDatabase

ShowMousePointer

 

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

 

Функции

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

1. Создайте новый проект командой File > New Project.

2. Если модуль My Libгагу отсутствует в проекте, добавьте его — для этого следует щелкнуть правой кнопкой мыши в окне проекта и выполнить команду Add > Module из контекстного меню.

3. Когда появится диалоговое окно Add Module, перейдите на вкладку Existing. Затем найдите файл MyLibrary.Bas и нажмите кнопку Open, чтобы включить модуль в проект.

4. Дважды щелкните на файле MyLibrary.Bas в окне проекта. Открывается окно программы. Вставьте следующий фрагмент в секцию (General)(Declarations):

 

Public Function CubeRoot

 

Visual Basic автоматически создает шаблон следующего вида:

 

Public Function CubeRoot()

End Function

 

5. Вставьте в шаблон следующий фрагмент (рис. 4.2):

 

Public Function CubeRoot(x as Double) As Double

If x = 0 Then

CubeRoot = 0

Exit Function

End If

 

CubeRoot = 10 ^ ((Log(Abs(x)) / Log(10)) / 3)

 

If x < 0 Then

CubeRoot = -CubeRoot

End If

End Function

 

 

Рис. 4.2. Окно программы с функцией для вычисления кубического корня

 

6. Выполните команду File > Save MyLibrary.

 

Перед тем как рассматривать данный пример, давайте кратко рассмотрим приведенный выше код. Функция получает аргумент х и пытается вычислить его кубический корень. Тип значения, возвращаемого функцией (в нашем примере Double -числовой тип, который может работать с очень большими и очень малыми, а также дробными числами), указывается в заголовке функции после ключевого слова As. Текст функции заканчивается командой End Function, а не End Sub. Обратите внимание на три строки, в которых присваивается значение переменной CubeRoot. Значение функции возвращается в виде переменной, имя которой совпадает с именем функции (в нашем примере — CubeRoot). Если бы наша функция называлась TimesTwo(), то и значение возвращалось бы в переменной TimesTwo (например, TimesTwo = х*2).

Перед тем как приступать к обработке аргумента, желательно проверить полученные данные. Сначала мы проверяем, равен ли аргумент 0 — как известно, кубический корень из 0 равен 0, поэтому мы можем сразу присвоить переменной CubeRoot возвращаемое значение и выйти из функции, не выполняя дальнейших вычислений. Для выхода из функции применяется команда Exit Function.

Математическое обоснование нас сейчас не интересует. Поверьте мне на слово,

команда CubeRoot = 10 ^ ((Log(Abs(x)) / Log(10)) / 3) возвращает кубический корень аргумента х.

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

 

CubeRoot = - CubeRoot

 

ПОДСКАЗКА Команда Exit Function завершает функцию без выполнения дальнейших вычислений. Все дальнейшие команды при этом игнорируются.

 

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

7. Дважды щелкните на форме Form1 в окне проекта — форма появляется в окне конструктора.

8. Задайте свойству Caption значение Работа с программной библиотекой.

9. Создайте на форме кнопку. Задайте ее свойству Name значение cmdCubeRoot, а свойству Caption — значение Кубический корень.

10. Дважды щелкните на кнопке cmdCubeRoot — открывается окно программы с процедурой события cmdCubeRoot_Click().

11. Вставьте в процедуру следующий фрагмент:

 

Dim Y As Double

 

Y = CubeRoot(27)

 

Print Y

 

Примерный вид окна программы показан на рис. 4.3.

 

Рис. 4.3. Код вызова функции CubeRoot

 

12. Запустите приложение и нажмите кнопку. Примерный вид формы показан на рис. 4.4. В нашем примере возвращаемое значение печатается прямо на форме.

 

 

Рис. 4.4. Функция возвращает кубический корень 3

 

Обычно возвращаемое значение отображается в одном из элементов формы, например в текстовом поле (рис. 4.5). Это делается так:

 

 

Рис. 4.5. Измененное окно программы и форма

 

13. Остановите программу, нажав кнопку [х] в правом верхнем углу формы. Вы снова окажетесь в режиме конструктора.

14. Дважды щелкните на форме Form1 в окне проекта.

15. Создайте на форме текстовое поле, задайте его свойству Name значение txtText1. Удалите текущее содержимое свойства Text.

16. Удалите из процедуры события Click() кнопки cmdCubeRoot последнюю строку (Print Y) и замените ее следующей:

 

txtText1.Text = Y

 

Результат показан на рис. 4.6.

Кроме того, можно удалить все содержимое процедуры и ограничиться всего одной строкой:

 

txtText1.Text = CubeRoot(27)

 

В этом случае возвращаемое значение присваивается элементу без использования промежуточной переменной.

 

Рис. 4.6. Новый вариант приложения

 

ПРИМЕЧАНИЕ Параметры функций должны заключаться в скобки.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: