Как завершить команду?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Как завершить команду?

Сообщение neic » 30.08.2006 (Ср) 19:35

Допустим у меня есть форма и модуль(fileopen), и при загрузке формы выполняется:
Код: Выделить всё
Call fileopen.fileopen
Form2.show


В модуле написано:
Код: Выделить всё
Public Function fileopen() string
...
MsgBox "Файлов нету!"
[color=red]Exit Sub[/color]
...
End Function


Вот Exit Sub не срабатывает, как закончить процедуру в данном случае?

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 30.08.2006 (Ср) 19:40

Exit Function

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Сообщение neic » 30.08.2006 (Ср) 20:04

lister
Ты показал выход из функции, а не из процедуры!

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 30.08.2006 (Ср) 20:41

:shock:
А как Function переводится?
Пора уже всем хорошим людям собраться и убить всех плохих людей.

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 30.08.2006 (Ср) 20:41

neic, а у тебя как раз функция, а не процедура :lol:

Из Function выйти можно только Exit Function

Exit Sub выводит из Sub

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Сообщение neic » 30.08.2006 (Ср) 21:37

lister писал(а):neic, а у тебя как раз функция, а не процедура :lol:

Из Function выйти можно только Exit Function

Exit Sub выводит из Sub

ОК. Как выйти в Function из Sub?

GB826
Function - Функция :)

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Re: Как завершить команду?

Сообщение Nicky » 30.08.2006 (Ср) 21:54

neic писал(а):Допустим у меня есть форма и модуль(fileopen), и при загрузке формы выполняется:
Код: Выделить всё
Call fileopen.fileopen
Form2.show


В модуле написано:
Код: Выделить всё
Public Function fileopen() string
...
MsgBox "Файлов нету!"
[color=red]Exit Sub[/color]
...
End Function


Вот Exit Sub не срабатывает, как закончить процедуру в данном случае?

Код: Выделить всё
dim b as boolean
Call fileopen.fileopen(b)
if not b then exit sub
Form2.show
...
Public Function fileopen(bIsOpen as boolean) string
...
MsgBox "Файлов нету!"
Exit Function
...
bIsOpen = true
End Function

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 30.08.2006 (Ср) 22:00

Как выйти в Function из Sub?


Это как это? :shock: Вот это вопросик... Ну, если я тебя правильно понял, то примерно так:

Код: Выделить всё
Private Function MyFunction
   Call MySub

End Function

Private Sub MySub
.
.
.
   Exit sub
.
.
.
End Sub

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 31.08.2006 (Чт) 6:44

2 All: нет, он хочет выйти из function, и из sub, ее вызвавшего

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 31.08.2006 (Чт) 7:58

Exit Sub/Function выходят только из текущей подпрограммы. Чтобы перескочить по стеку на 2 процедуры выше, можно использовать Err.Raise, а потом ошибку поймать в верхней процедуре и там сделать Exit Sub. По сути, метод тот же, что с булевым флагом, но элегантнее...

Azur
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 18.08.2006 (Пт) 15:20

Сообщение Azur » 31.08.2006 (Чт) 13:25

Я в таких когда то делал может и не очень красиво, но элементарно:
выходишь из функции через goto... Делаешь метку какую - нить типа EndFunct и ставишь его перед exit function... Собственно все 8)
Хотя конечно exit function - логично =)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 31.08.2006 (Чт) 14:24

Azur писал(а):Я в таких когда то делал может и не очень красиво, но элементарно:
выходишь из функции через goto... Делаешь метку какую - нить типа EndFunct и ставишь его перед exit function... Собственно все 8)
Хотя конечно exit function - логично =)


вот это все к чему?
Весь мир матрица, а мы в нем потоки байтов!

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 06.09.2006 (Ср) 18:20

Можно еще сделать примерно так:
Код: Выделить всё
Sub SampleSub
    If SampleFunc = 1 Then Exit Sub
    ...
End Sub

Function SampleFunc As Byte
    If ... Then SampleFunc = 1
End Function


На месте ... то, что требуется

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.09.2006 (Чт) 7:27

to Drag, во-первых читай топик полностью, во-вторых, может все-таки переменную типа Boolean использовать для таких дел
Весь мир матрица, а мы в нем потоки байтов!

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 07.09.2006 (Чт) 12:36

А я топик всегда читаю полностью.
А Byte я часто использую вместо boolean из-за того, что он в два раза меньше памяти требует.


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

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

Сейчас этот форум просматривают: Mail.ru [бот], SemrushBot и гости: 139

    TopList