Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. Вызов процедур из процедуры пользователя

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

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Write(1)

A()

Write(2)

B()

Write(3)

End Sub

Sub C()

Write(7)

End Sub

Sub B()

Write(5)

C()

Write(6)

End Sub

Sub A()

Write(4)

End Sub

Мы видим здесь 4 процедуры с именами Button1_Click, C, B, A. Работать программа начинает по щелчку по кнопке Button1 с выполнения процедуры Button1_Click. В процессе своей работы эта процедура вызовет по очереди процедуры A и B. Порядок записи объявлений процедур в окне кода безразличен и не влияет на порядок их вызова. Поглядите на тело процедуры B. В процессе своей работы эта процедура вызовет процедуру C. Процедура пользователя вызвала процедуру пользователя. Это не только допустимо, но и приветствуется. Помните только, что когда вызываемая процедура C свое отработала, компьютер возвращается туда, откуда она была вызвана, то есть внутрь процедуры B, после чего выполняется следующий оператор, в нашем случае Write(6).

Вряд ли вам с непривычки удастся без компьютера угадать правильный ответ. Тогда непременно программу – в компьютер и – пошаговый режим. Желтая полоска будет скакать по программе туда-сюда. Перед каждым нажатием на F11 вы обязаны предсказать, куда она прыгнет! Не сможете – нет смысла читать книгу дальше.

Ответ:

1425763

Вы спросите: зачем все это нужно? Это не просто нужно, без этого при программировании не обойтись.

      1. Операторы Stop, End и Exit Sub

До сих пор мы писали процедуры, которые выполняли свою работу до конца и заканчивали ее, как положено, то есть только на операторе End Sub, не раньше. Существуют ли операторы, которые подобно операторам выхода из цикла Exit Do и Exit For заставляют компьютер покинуть процедуру, не доходя до ее конца? Такие операторы существуют.

End. Оператор End заставляет VB завершить работу не только процедуры, а всего проекта. Пример: программа

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Write(1)

Write(2)

End

Write(3)

End Sub

напечатает

12

после чего End завершает режим работы и проект переходит в режим проектирования.

Потренируйтесь. Определите без компьютера, что напечатает программа:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Write(2) : A() : Write(3) : End : Write(4)

End Sub

Sub A()

Write(6) : End : Write(7)

End Sub

Ответ:

26

Помните, что при выполнении оператора End и при завершении работы проекта кнопкой Stop Debugging на панели инструментов событие формы Closed не наступает.

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

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Write(1)

Write(2)

Stop

Write(3)

End Sub

Здесь программа напечатает 12 и сделает паузу. После щелчка по Start она допечатает 3 и закончит выполнение процедуры.

Механика работы оператора Stop проста: наткнувшись на него, компьютер переходит в режим прерывания. Фактически оператор Stop равносилен установке точки прерывания. Как только Stop выполнился, вы можете делать все, что можно делать в режиме прерывания, например узнавать значения переменных. Чтобы продолжить выполнение программы, вы щелкаете по кнопке Start. Тогда он продолжает работу с того места, где остановился. А если хотите, можете вместо Start нажать F11 и тем самым продолжить выполнение программы в пошаговом режиме.

Exit Sub. Оператор Exit Sub не такой решительный, как End. Он не выбрасывает VB из режима работы, а просто заставляет компьютер выйти из процедуры, в которой он выполнился. Если он выполнился в вызываемой процедуре, то VB возвращается, как положено, в процедуру, ее вызвавшую, на положенное место. Если он выполнился в процедуре обработки события, то VB просто завершает работу этой процедуры.

Пример:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Write(2) : B() : Write(3) : Exit Sub : Write(4)

End Sub

Sub B()

Write(6) : Exit Sub : Write(7)

End Sub

Эта программа напечатает

263

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

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

WriteLine("Я, король Франции, спрашиваю вас - кто вы такие? Вот ты - кто такой?")

ATOS()

WriteLine("А ты, толстяк, кто такой?")

PORTOS()

WriteLine("А ты что отмалчиваешься, усатый?")

DARTANIAN()

WriteLine("Анна! Иди-ка сюда!!!")

Exit Sub

WriteLine("Аудиенция закончена, прощайте!")

End Sub

Sub ATOS()

WriteLine("Я - Атос")

End Sub

Sub ARAMIS()

WriteLine("Это так же верно, как то, что я - Арамис!")

End Sub

Sub PORTOS()

WriteLine("А я Портос! Я правильно говорю, Арамис?")

ARAMIS()

WriteLine("Он не врет, ваше величество! Я Портос, а он Арамис.")

End Sub

Sub DARTANIAN()

WriteLine("А я все думаю, ваше величество - куда девались подвески королевы?")

Exit Sub

WriteLine("Интересно, что ответит король?")

PORTOS()

End Sub

Сверьте с ответом. Если не сходится, запустите программу в пошаговом режиме.

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