Время жизни переменных

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

Время жизни переменных

Сообщение Dummiel » 02.08.2006 (Ср) 11:56

Хай, други!

Перед загрузкой формы Form1 в области деклараций я объявляю переменные и массивы оператором "Dim".

Я так понимаю, что Dim определяет жизнь значений переменных ТОЛЬКО на то время, пока работает данная форма.

Вопрос: когда происходит Unload Me, переменные -

1. "Умирают", т.е., их значения обнуляются автоматически.
2. "Остаются жить", но выходят из зоны видимости, сохраняя свои значения.

Что верно? Я стал принудительно чистить переменные, тогда все работает корректно.

При повторном вызове данной формы я обнаружил, что значения всех переменных остались теми же, что и в после предыдущей работы формы, т.е., не обнулились. А мне это совсем не нужно. В справочниках написано, что Dim объявляет переменные на уровне модуля, и только Public делает их "неубиваемыми".

Непонятку разрешите, please!

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

Сообщение alibek » 02.08.2006 (Ср) 12:00

Dim, Private, Public влияют только на область видимости, но не на время жизни. Когда уничтожается форма, уничтожаются и все переменные, независимо от того, Public они или нет.
Так что верно первое.

С другой стороны, несколько раз были странные ситуации, так что важные переменные я все-равно обнуляю вручную (на всякий случай) при выгрузке формы.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.08.2006 (Ср) 12:52

Unload выгружает форму, но не уничтожает её.
Форма уничтожается тогда, когда на неё пропадает последняя ссылка.
При этом гарантированно уничтожатся все её локальные переменные.
Изображение

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

Сообщение alibek » 02.08.2006 (Ср) 13:11

Код: Выделить всё
Dim frm As Form1
Set frm = New Form1
Load frm
...
frm.DoInput 'внутри DoInput есть .Show, а на кнопке Close Hide
Unload frm
Set frm = Nothing


Объектных переменных в форме нет.
Тем не менее странности место имели.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.08.2006 (Ср) 15:02

Может, кто-то ещё держал ссылку на эту форму?
Изображение

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 02.08.2006 (Ср) 15:51

ИМХО если Set Form1 = Nothing тогда удаляеться форма! Я прав?
#define ROFL 0xDDDD

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.08.2006 (Ср) 15:56

нет.
Изображение

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 02.08.2006 (Ср) 15:57

Не всегда.
[Место cдаётся]

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 02.08.2006 (Ср) 15:59

ИМХО если Set Form1 = Nothing тогда удаляеться форма! Я прав?


если это была последняя ссылка на объект формы, то да - объект формы уничтожается. при условии что окно формы уничтожается раньше.

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

Сообщение alibek » 02.08.2006 (Ср) 16:35

tyomitch писал(а):Может, кто-то ещё держал ссылку на эту форму?

Ну... Я все-же проверял.
В форме вообще нет объектных переменных, это диалоговое окошко, отображающее некую статическую информацию. Вызывается оно только тем кодом, который я показал.
Может и остались где хвосты, но я замучался искать, поэтому надоело возится и переменные я очищал вручную.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Хакер » 02.08.2006 (Ср) 16:39

alibek
А какие были странности?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 03.08.2006 (Чт) 5:01

Вот в том-то и дело, что после выгрузки формы, а потом, при повторном ее вызове, все переменные у меня сохранялись (вернее, их значения). Я специально значение каждой выводил через MsgBox. Короче, лучше всего чистить их их тупо - ручками! Тогда уж точно спокоен будешь.

Спасибо всем за информацию.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.08.2006 (Чт) 6:32

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

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 03.08.2006 (Чт) 8:19

tyomitch, отдельное спасибо!

Твой ответ расставил все точки над i :) Именно такого ответа я и добивался.


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

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

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

    TopList