Форма не реагирует на Unload

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

Форма не реагирует на Unload

Сообщение kuhtiov » 06.11.2007 (Вт) 9:55

Всем доброго времени суток!
В форме, после кода есть запись:
Unload Form1

После завершения в кода, форма не выгружается. Сперв подумал что в коде накосячил, а форма не выгружается, потому что не выполняется строка. Поменял Unload Form1 на end, форма закрылась. Поробовал вставить функцию в кнопку, эффект тот-же. Причем, происходит это только с одной формой. Всего их 2. Сперва было созданна первая, затем была сделана ее копия. Данная процедура во второй форме. Первая форма выгружается.

Собственно вопрос, в каких случаях может не работать функция Unload???

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

Сообщение Viper » 06.11.2007 (Вт) 10:57

Сдается мне, что выгражаешь ты не то что хота, а ваще давай код
Весь мир матрица, а мы в нем потоки байтов!

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 06.11.2007 (Вт) 11:06

Эмм... код в настоящий не со мной. Форму точно ту выгружаю. Причем такую проблему наблюдаю не в первый раз. Иожет еще у каго что было подобное. Вообще, может ли существовать какое либо условие в ворме, исходя из которого данная процедура не должна выполняться?

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 06.11.2007 (Вт) 13:26

ну что, никто не разу не сталкивался с таким?

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 06.11.2007 (Вт) 13:40

Все с нетерпением ждут кода :)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 06.11.2007 (Вт) 13:50

Блин, только завтра

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 06.11.2007 (Вт) 18:37

Значит завтра и ответ будет. А вообще у меня такое тоже бывало, когда например с винсоком работал. Но интересно увидеть что у тебя за код.
Подпись проходит рефакторинг

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 06.11.2007 (Вт) 18:50

мне кажется дело в логике....
например сначала unload Form1, а следующая строка типа Form1.Show
потому как end - завершает все приложение и естественно все формы выгружаются....

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 06.11.2007 (Вт) 20:33

На всякий случай: все таймеры выключены? все элементы с таймаутом (Inet Control, Winsock) вырублены? все формы закрыты нафик?
Моду создают модоки, а распространяют модозвоны.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 06.11.2007 (Вт) 20:37

amer, очень сомневаюсь. Автор наверняка выполнил код в режиме прерываний прежде чем писать сюда, а это сразу выявило бы подобные ошибки.
По-моему гораздо более вероятно, что форма не выгружается из-за какого-либо контрола. (того же Winsock'а, упомянутого Lumen'ом)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 06.11.2007 (Вт) 20:59

вот при таком коде
Private Sub Timer1_Timer()
Unload Me
Label1.Caption = "Фиг Вам!"
End Sub
форма скрывается а приложение висит в памяти....

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 06.11.2007 (Вт) 21:07

amer, да, а так:
Код: Выделить всё

Private Sub Timer1_Timer()
    Label1.Caption = "Фиг Вам!"
    Unload Me
End Sub

форма выгружается нормально. Это что получается? Форма выгружается, а код продолжает выполняться? Тогда форма атоматически загружается в память, но не отображается. Я всегда думал, что при вызове Unload Me форма выгружается и процедура завершается. Значит надо делать Exit Sub сразу после Unload Me.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

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

Сообщение Хакер » 06.11.2007 (Вт) 21:36

Я всегда думал, что при вызове Unload Me форма выгружается и процедура завершается.

Как ты себе это представляешь?

Значит надо делать Exit Sub сразу после Unload Me.

Т.е.
Unload Me: Exit Sub: End Sub вместо Unload Me: End Sub ?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 06.11.2007 (Вт) 21:37

скорее надо делать

Timer1.Enabled=False

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 06.11.2007 (Вт) 22:45

Как ты себе это представляешь?

А что тут непонятного? Есть процедура в коде формы Form1. В процедуре встречается "Unload Me". По-моему, было бы вполне логично, если бы не только выгружалась Form1, но и завершалась эта процедура.

Т.е.
Unload Me: Exit Sub: End Sub вместо Unload Me: End Sub ?


Нет. Я имею ввиду случаи, когда Unload Me используется в середине процедуры:
..... операторы.... : Unload Me: Exit Sub: ..... операторы....: End Sub


P. S.
amer, вот ты попробуй сначала, а потом пиши. Не поможет.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

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

Сообщение Хакер » 06.11.2007 (Вт) 23:17

А что тут непонятного?

Всё непонятно:

Код: Выделить всё
Sub a
  MsgBox "До вызова B"
  b
  MsgBox "После вызова B"
End Sub


Sub b
     MsgBox "Я - Sub B"
     ' Я идиот! Убейте меня, кто-нибудь!????
End Sub


Что такого должно быть написано в Sub B, чтобы сообщение "После вызова В" не появлялась?


..... операторы.... : Unload Me: Exit Sub: ..... операторы....: End Sub


Код: Выделить всё
+
-
And
/
Mod
&
AddressOf
*
Like
Unload Me
Xor
^
Imp

Да?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 06.11.2007 (Вт) 23:30

попробовал... не помогло.... :cry:

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 06.11.2007 (Вт) 23:36

Хакер
Что такого должно быть написано в Sub B, чтобы сообщение "После вызова В" не появлялась?

Например End. Unload - процедура, выгружающая объект. Я думал что когда выгружается объект и при этом выполняется какой-либо код этого объекта - код автоматически завершается. Сейчас я понял что это не так.
Да?

Нет. Все время путаю :oops:
...код до... : Unload Me: ...код после... : End Sub

amer, попробуй сразу после Unload Me поставить Exit Sub. Это поможет :)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 06.11.2007 (Вт) 23:39

burik
не нужно понимать слова буквально:

мне кажется дело в логике....
например сначала unload Form1, а следующая строка типа Form1.Show
потому как end - завершает все приложение и естественно все формы выгружаются....

может дело в:

вот при таком коде
Private Sub Timer1_Timer()
Unload Me
Label1.Caption = "Фиг Вам!"
End Sub
форма скрывается а приложение висит в памяти....

вобщем дело в логике...

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 06.11.2007 (Вт) 23:58

кстати:

Private Sub Timer1_Timer()
Unload Me
Label1.Caption = "тыры пыры не помогает!"
Exit Sub
End Sub

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 07.11.2007 (Ср) 0:00

а вот так:

Private Sub Timer1_Timer()
Unload Me
Exit Sub
Label1.Caption = "помогло!"
End Sub

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

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

мдя.. пойду я лучше отсюда, ибо, видимо, бесполезно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 07.11.2007 (Ср) 1:11

После Unload Me может быть выполнен любой код, если нет обращений к форме и контролам на ней находящимся, в противном случае форма снова загрузится в память, при этом все свойства будут сброшены в установленные в дизайнере. Exit Sub прерывает выполнение процедуры и возвращает управление вызывающему, всё что после него не будет выполнено вообще.
Изображение

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 07.11.2007 (Ср) 6:56

amer писал(а):мне кажется дело в логике....
например сначала unload Form1, а следующая строка типа Form1.Show
потому как end - завершает все приложение и естественно все формы выгружаются....


Так точно, Form1.Show есть. Но где связь, поясните. Я думал что форма должна выгружаться в любом случаи. И еще, таймеров нет, контрол есть.

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

Сообщение Viper » 07.11.2007 (Ср) 8:34

и что ты после form1.show хочешь? Ты же ее загружаешь этим кодом!
Весь мир матрица, а мы в нем потоки байтов!

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 07.11.2007 (Ср) 11:41

kuhtiov, форма выгружается, но код продолжает выполняться и если там есть Form1.Show, то форма загрузится заново.

amer, прочитай последнюю строку моего поста. Только внимательно:
amer, попробуй сразу после Unload Me поставить Exit Sub. Это поможет :)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 07.11.2007 (Ср) 12:06

все давно поняли кто что имел ввиду поэтому драки не будет :lol:

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 07.11.2007 (Ср) 12:56

Да.. Драки не будет :lol: . Посему тему можно щитать закрытой :)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 07.11.2007 (Ср) 14:17

Viper писал(а):и что ты после form1.show хочешь? Ты же ее загружаешь этим кодом!


Упс, запарился. Там не form1.show, а form2.show. Ну одна форма закрывается, другая открывается.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 07.11.2007 (Ср) 14:34

kuhtiov, код давай :)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

След.

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

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

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot], Yandex-бот и гости: 32

    TopList  
cron