Оператор GoTo

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dieman
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 25.02.2013 (Пн) 1:56

Оператор GoTo

Сообщение Dieman » 26.02.2013 (Вт) 21:37

Вопрос на засыпку )
есть два события
Код: Выделить всё
Private Sub Command1_Click()
MsgBox "1"
GoTo Q:
End Sub

Private Sub Command2_Click()
Q:
MsgBox "2"
End Sub

А теперь вопрос ) но тут уже наверно все поняли ))))
Как с помощью этого оператора прыгать по функциям\событиям и т.д.
И насколько я знаю GoTo этого не умеет.. Как быть ?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Оператор GoTo

Сообщение FireFenix » 26.02.2013 (Вт) 22:53

Как с помощью этого оператора прыгать по функциям\событиям и т.д.

Наркоман?

Dieman писал(а):Как быть ?

Перестать упарываться и начать новую жизнь.

А если по нормальному - то построить правильную логику приложения/ядра/движка. За Go To в высокоуровневых языках положена небесная кара.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Dieman
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 25.02.2013 (Пн) 1:56

Re: Оператор GoTo

Сообщение Dieman » 26.02.2013 (Вт) 23:03

Жесть, Ад и погибель )

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Оператор GoTo

Сообщение ger_kar » 26.02.2013 (Вт) 23:24

Код: Выделить всё
Private Sub Command1_Click()
MsgBox "1"
Command2_Click
End Sub

Private Sub Command2_Click()
MsgBox "2"
End Sub
Бороться и искать, найти и перепрятать

Dieman
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 25.02.2013 (Пн) 1:56

Re: Оператор GoTo

Сообщение Dieman » 27.02.2013 (Ср) 0:01

меня наверно не совсем поняли..
Код: Выделить всё
    Private Sub Command1_Click()
MsgBox "1"
MsgBox "2"
MsgBox "3"
goto Q:
    End Sub

    Private Sub Command2_Click()
MsgBox "4"
MsgBox "5"
Q:
MsgBox "6"
    End Sub


Вот с этим как быть ?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Оператор GoTo

Сообщение iGrok » 27.02.2013 (Ср) 0:14

Dieman писал(а):Вот с этим как быть ?

Читать первый ответ в топике много раз до полного просветления и перехода в состояние нирваны (по желанию).

Код: Выделить всё
Private Sub Command1_Click()
    MsgBox "1"
    MsgBox "2"
    MsgBox "3"
    DoSomething
End Sub

Private Sub Command2_Click()
    MsgBox "4"
    MsgBox "5"
    DoSomething
End Sub

Private Sub DoSomething
    MsgBox "6"
End Sub
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Оператор GoTo

Сообщение Хакер » 27.02.2013 (Ср) 0:19

Dieman писал(а):Вот с этим как быть ?

С этим быть вот так:
Код: Выделить всё
Const Scenario1 = 1
Const Scenario2 = 2

Private Sub Command1_Click()
    DoSomeJob Scenario1
End Sub

Private Sub Command2_Click()
    DoSomeJob Scenario2
End Sub

Private Sub DoSomeJob(ByVal lScenarioId as long)
    select case lScenarioId
        case Scenario1
            MsgBox "1"
            MsgBox "2"
            MsgBox "3"
        case Scenario2
            MsgBox "4"
            MsgBox "5"
    end select
    msgbox "6"
End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dieman
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 25.02.2013 (Пн) 1:56

Re: Оператор GoTo

Сообщение Dieman » 27.02.2013 (Ср) 0:56

Шаманский бубен 99 левла конечно спасает!
Хакер писал(а):С этим быть вот так:

спасибо за решение.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.02.2013 (Ср) 8:45

Хакер писал(а):С этим быть вот так:

Мне вариант iGrok'а больше нравится. Там нет скидывания всего кода в одну процедуру.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Оператор GoTo

Сообщение ger_kar » 27.02.2013 (Ср) 8:56

А мне больше вариант Хакера нравится. Если конечно задача такая простая, то да на это заморачиваться смысла нет. А вот если событий много и обработка этих событий взаимосвязана, то лучше все делать в одной процедуре, которая вызывается из обработчиков. Написал обработчик события с вызовом некой процедуры, и забыл про него. И потом править и модернизировать нужно будет код в одном месте, а не метаться туда сюда. Так что такой вариант более универсальный.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.02.2013 (Ср) 9:30

ger_kar писал(а):И потом править и модернизировать нужно будет код в одном месте, а не метаться туда сюда. Так что такой вариант более универсальный.

А теперь представь, что вариантов не 2, а 20 и каждый занимает более 100 строк :mrgreen:

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Оператор GoTo

Сообщение ger_kar » 27.02.2013 (Ср) 9:49

Ситуации разные бывают. Может в каком то и неудобно. Но чаще удобно. Вот представь такую ситуацию. Есть некий массив взаимосвязанных текстовых полей. Изменение информации в одном поле, должно приводить к изменению в других. В свою очередь изменение других полей может отразиться на первом. Если делать все в одном месте - получается предельно просто и хорошо, а если нет, то приходится делать целую кучу глобальных флагов, что-бы не было паразитных каскадных обновлений и т.д. А так, все в одном месте. Да и если код разбухает, то естественно часть его обособляется в отдельные функции, но тем не менее это единый цельный механизм, пусть и состоящий из нескольких функций. Может такой подход и не всегда оправдан, но чаще да, чем нет.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.02.2013 (Ср) 10:29

ger_kar писал(а):Может такой подход и не всегда оправдан, но чаще да, чем нет.

Конечно, всё по ситуации, но по-моему, чаще как раз наоборот.
А объединение кода в процедуру, которая сразу же его разделяет Select'ом по тому же принципу, вообще очень подозрительно выглядит...

ger_kar писал(а):Если делать все в одном месте - получается предельно просто и хорошо, а если нет, то приходится делать целую кучу глобальных флагов, что-бы не было паразитных каскадных обновлений и т.д.

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

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Оператор GoTo

Сообщение ger_kar » 27.02.2013 (Ср) 11:01

Qwertiy писал(а):Кстати, флага обычно вполне хватает одного.
Опять же все зависит от ситуации.
Qwertiy писал(а):Чем тебя одна процедура от этого спасёт, если её так же вызовут из нескольких обработчиков с разными параметрами?
Ну обычно хватает одного флага - локальной переменной. Если установлен - сразу на выход без всяких обновлений. А можно и посложнее. Я последний раз запарившись вносить кучу изменений в обработчики и все взаимно согласовывать сделал целый менеджер, который не просто управлял одним флагом, а все приходящие события помещал в очередь и после обработки текущего события очередь просматривалась и не нужные события просто удалялись, а нужные выполнялись в нужной последовательности. Также в зависимости от ситуации генерировалась нужная серия событий для необходимых обновлений в приложении. И все получилось достаточно просто и главное универсально.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.02.2013 (Ср) 11:53

ger_kar писал(а):Ну обычно хватает одного флага - локальной переменной.

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

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Оператор GoTo

Сообщение ger_kar » 27.02.2013 (Ср) 11:57

Qwertiy писал(а):Локальной статической, ты имел в виду?
Да, она самая :)
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 75

    TopList  
cron