Страница: 1 |
Страница: 1 |
Вопрос: Кто как формы выгружает?
Добавлено: 09.06.06 17:56
Автор вопроса: Z_of_X | ICQ: 997550
Вот вопрос такой назрел...
Все время делал
Me.Hide
Unload Me
хотя есть еще и
Set From1=Nothing ...
Как ваще правильно?
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
Mervil
Вопросов: 1
Ответов: 7
Профиль | | #1
Добавлено: 09.06.06 19:09
Обое правильно, если текущим обьектом есть форма.
Если жорстоко придираться, то по мне верным есть 2 вариант. Так как является прямым обращением к форме.
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 09.06.06 21:49
Первое форму не выгружает, а только скрывает. Второе и третье выглядит одинаково.
Номер ответа: 3
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #3
Добавлено: 09.06.06 22:15
Зрительно Set Form1=Nothing хуже Unload Form1, поскольку при чтении создаётся впечатление, что объект не выгружается, а всего лишь обнуляется указатель. Хотя, наверное, в vb6 должно работать...
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 10.06.06 16:09
.code org 100h
start:
jmp dword ptr reboot
.data reboot
dw 0ffff0000h
end start
выгружает наповал
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 10.06.06 16:24
http://www.vbnet.ru/forum/show.aspx?id=75361
Номер ответа: 6
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #6
Добавлено: 11.06.06 15:26
Зрительно хуже, а в действительности происходит одно и то же явление, декремент числа ссылок на COM-объект, т.е. Release. Если число ссылок равно 0, объект совершает аутодафе, т.е. уничтожается.
Номер ответа: 7
Автор ответа:
Z_of_X
ICQ: 997550
Вопросов: 5
Ответов: 18
Профиль | | #7
Добавлено: 28.06.06 14:43
ИТАК. Через неделю, делаю прогу, натыкаюсь на непонятные глюки...
Лично для меня это было открытие(не глюки ).
не есть тоже самое что и
Наблюдал следующее...
Пример 1.
Dim MyVar as Byte
Private Sub Command1_Click()
MsgBox MyVar
End Sub
Private Sub Command2_Click()
MyVar=100 '!!! - какая мелочь..., читаем дальше
Unload Form1
End Sub
'Имееем 2 формы: MainForm - из нее делается Form1.Show, ну и сам подопытный Form1.
'Делаем так: Запускаем, нажимаем кнопку, вылазиет "0", закрываем форму(Кнопкой Command2), Снова открываем форму(Form1), вызываем мсгбокс и... о чудо!!! результат "100" !!!
Заменяем Unload Form1 на Set Form1 = Nothing и о чудо...! работает как надо, тоесть выдает "0".
Мораль такова: Unload Form1 выгружает форму, но все переменные оставляет, а Set Form1 = Nothing - делает все как надо.
Номер ответа: 8
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #8
Добавлено: 28.06.06 21:14
Н-да, не очень понятно...
Но я потому и перешёл на .net поскольку устал натыкаться на такие вот странности и обходить их потом ещё более странными методами.
Мораль: не стоит относится к формам vb6 как к классам.
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 28.06.06 21:47
Хм зачет за фишку... А я то думаю нафига умные люди Set Form1 = Nothing пишут, ведь в unload букофф меньше )
Номер ответа: 10
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #10
Добавлено: 29.06.06 03:07
Я кстати как-то так сделал memory leak.
Как повторить? Вот как.
*Сделать Form1. На него положить PictureBox с рисунком, желательно рисунок крупный, чтоб заметно памяти жрал.
*И положить кнопку, на которую надо будет жать.
*Написать туда код:
Dim Frm As Form1
Set Frm = New Form1
Frm.Show
Frm.Hide
Set Frm = Nothing
End Sub
Будет видно, что при нажатиях на кнопку потребление памяти все растет, растет, растет.
А если перед Set Frm=nothing поставить Unload Frm, то все станет нормально.
Мораль такова: Set Frm=Nothing и Unload Frm - разные вещи (еще раз). И Unload Frm надо вызывать обязательно, если форма создается как класс. Иначе получается Memory Leak.
Вот на такую неприятность я напоролся в свое время. Самое смешное, что Set Frm=Nothing в данном случае вообще не нужно, так как VB делает это автоматически при выходе из процедуры. А вот Unload Frm - обязательно, иначе форма потеряется и удалить ее из памяти становится невыполнимой задачкой (в рамках VB).
Номер ответа: 11
Автор ответа:
Z_of_X
ICQ: 997550
Вопросов: 5
Ответов: 18
Профиль | | #11
Добавлено: 29.06.06 12:28
С этих пор начинаю юзать
Unload Form1
Set Form1 = Nothing
Номер ответа: 12
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #12
Добавлено: 29.06.06 13:17
Есть небольшое различие между формами, неявно созданными через Show, и созданными явно через Set = as new Form1. Первые стараюсь не использовать вообще. Со вторыми таких проблем не будет.
Номер ответа: 13
Автор ответа:
LeX
ICQ: 301424893
Вопросов: 28
Ответов: 277
Web-сайт:
Профиль | | #13
Добавлено: 29.06.06 19:17
Не легче одно слово
Номер ответа: 14
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #14
Добавлено: 30.06.06 14:44
Чтобы выгрузить одну форму?
[IMG]http://www.elite-games.ru/conference/images/smiles/super.gif[/IMG]
Номер ответа: 15
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #15
Добавлено: 30.06.06 14:44
Пардон, вставка глюканула