Научите выгружать форму

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Научите выгружать форму

Сообщение kminas » 05.04.2006 (Ср) 21:26

Не могу выгрузить форму из памяти!
Код: Выделить всё
Unload frmPh
Set frmPh = Nothing

пока тестирую программу - выгружается, а, после компилляции (exe-шник), - нет. Подскажите начинающему!?
Константин

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.04.2006 (Ср) 21:36

Обычно хватает Unload Form1.
Если хочется эстетики, то можно сделать так:
Код: Выделить всё
Dim frm As Form
...
Set frm = New frmSettings
Load frm
...
frm.Show vbModal
...
Unload frm
Set frm = Nothing


Если форма при этом не выгружается, значит на ней есть несброшенные перекрестные ссылки, активные таймеры или другие недоработки.
Lasciate ogni speranza, voi ch'entrate.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 06.04.2006 (Чт) 16:32

Код: Выделить всё
Dim hMem as Long
hMem=GetModuleHandle("gdi32.dll")
FreeLibrary hMem

Гарантировано выгружает форму :lol:
Если всё делать своими ручками, они скоро отвалятся !

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 06.04.2006 (Чт) 22:31

alibek писал(а):Если форма при этом не выгружается, значит на ней есть несброшенные перекрестные ссылки, активные таймеры или другие недоработки.
А что такое активный таймер. Первый раз поставил таймер и сейчас не знаю, может быть он активный?
Константин

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 06.04.2006 (Чт) 23:08

Если
Код: Выделить всё
Timer1.Enabled=True

значит таймер активный.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 07.04.2006 (Пт) 17:06

Спасибо VVitafresh, у меня и так True, спасибо Kovu, только Басик ругается на
Код: Выделить всё
GetModuleHandle
хочет какой-то Sub или Function. Я ее поставил в
Код: Выделить всё
Private Sub Form_Unload(Cancel As Integer)
Константин

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.04.2006 (Пт) 17:18

ROTFML
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.04.2006 (Пт) 17:21

(вытирая слезы) Kovu, ты ведь понимаешь, что за твой совет тебе полагается замечание? Пусть даже и устное :)
Lasciate ogni speranza, voi ch'entrate.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 07.04.2006 (Пт) 21:40

alibek
ROTFML -M=madly?
Приму к сведению =-)
kminas
Ставишь перед выгрузкой Timer1.Enabled=False
К тому что я написал: это вариант для самых экстремалов =-), декларации функций если так хочется опробовать есть в апивьевере :)
Если всё делать своими ручками, они скоро отвалятся !

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 07.04.2006 (Пт) 22:13

Kovu Поставил енебле фальш, но, все одно работает, блин, голубчик!
Константин

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 08.04.2006 (Сб) 10:27

kminas
Покажи код весь, т.к. если форма не выгружается, значит какой-то участок кода продолжает выполняться. Ну и если уж код мегасекретный есть не слишком хороший выход - End
Если всё делать своими ручками, они скоро отвалятся !

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 08.04.2006 (Сб) 17:36

Kovu
Не могу весь код: это телефонный справочник предприятия
Константин

zaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 27.03.2006 (Пн) 23:04

Re: Научите выгружать форму

Сообщение zaf » 08.04.2006 (Сб) 19:03

Unload Me
Form1.Show

Удаляет текущую форму и загружает вместо нее новую!

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 09.04.2006 (Вс) 9:37

Спасибо всем! НАШЁЛ!
Мне на форуме SQL подсказали:
проверь нет ли ссылок на форму или на контрол формы в других модулях при открытии проэкта и при закрытии
Проверил. Клавишей F8. И понял, что та процедура, где происходит выгрузка формы frmInfo
Код: Выделить всё
Private Sub Form_Unload(Cancel As Integer)
не задействована. Тогда я переставил код выгрузки этой формы в процедуру выгрузки frmPh
Код: Выделить всё
Unload frmInfo
    Set frmInfo = Nothing
    Unload frmPh
    Unload Me
    Set frmPh = Nothing
И все заработало, т.е. выгружается!
Константин


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList