ПОНЯТНО О Visual Basic NET (том 2)

         

Операторы 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
Задание 62.        
Вот вам программа с процедурами. Вам нужно, не запуская ее, записать на бумажке весь разговор, который ведут герои «Трех мушкетеров».
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
Сверьте с ответом. Если не сходится, запустите программу в пошаговом режиме.
Задание 63.        
Среди графических методов VB нет методов «крестик» и «треугольник». Вы можете возместить этот недостаток, написав две соответствующие процедуры с тремя параметрами: координата_х, координата_у, размер. Если не получается, то прочтите следующий раздел и тогда получится обязательно.

Содержание раздела