Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 09.06.06 21:49
Первое форму не выгружает, а только скрывает. Второе и третье выглядит одинаково.

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 09.06.06 22:15
Зрительно Set Form1=Nothing хуже Unload Form1, поскольку при чтении создаётся впечатление, что объект не выгружается, а всего лишь обнуляется указатель. Хотя, наверное, в vb6 должно работать...

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 10.06.06 16:09
model tiny
.code org 100h
start:
jmp dword ptr reboot
.data reboot
dw 0ffff0000h
end start


:) выгружает наповал :)

Ответить

Номер ответа: 5
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #5
Добавлено: 10.06.06 16:24
http://www.vbnet.ru/forum/show.aspx?id=75361

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 11.06.06 15:26
Зрительно хуже, а в действительности происходит одно и то же явление, декремент числа ссылок на COM-объект, т.е. Release. Если число ссылок равно 0, объект совершает аутодафе, т.е. уничтожается.

Ответить

Номер ответа: 7
Автор ответа:
 Z_of_X



ICQ: 997550 

Вопросов: 5
Ответов: 18
 Профиль | | #7 Добавлено: 28.06.06 14:43
ИТАК. Через неделю, делаю прогу, натыкаюсь на непонятные глюки...
Лично для меня это было открытие(не глюки :) ).
Unload Form1

не есть тоже самое что и
Set Form1=Nothing

Наблюдал следующее...

Пример 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-сайт: neco.pisem.net
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #10
Добавлено: 29.06.06 03:07
Я кстати как-то так сделал memory leak.

Как повторить? Вот как.
*Сделать Form1. На него положить PictureBox с рисунком, желательно рисунок крупный, чтоб заметно памяти жрал.
*И положить кнопку, на которую надо будет жать.
*Написать туда код:
Private Sub Command1_Click()
Dim Frm As Form1
Set Frm = New Form1
Frm.Show
Frm.Hide
Set Frm = Nothing
End Sub
*И нажимать на кнопку много раз, наблюдая за потреблением памяти процессом VB6.exe.

Будет видно, что при нажатиях на кнопку потребление памяти все растет, растет, растет. :(

А если перед 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
С этих пор начинаю юзать
Form1.Hide
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-сайт: www.vbkoders.info
 Профиль | | #13
Добавлено: 29.06.06 19:17
Не легче одно слово
End
написать?

Ответить

Номер ответа: 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
Пардон, вставка глюканула :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам