Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Пара вопросов по закрытию формы Добавлено: 07.11.05 13:33  

Автор вопроса:  Pantalone
Есть форма, у нее кнопка, через которую вызываю вторую форму:
Set frmF2 = New Form2
frmF2.Show vbModal
    
Set frmF2 = Nothing


Т.е. как только вторую форму закроют, за ней подчистится автоматом.

Но как эту вторую форму закрывать корректно? И Me.Hide и Unload Me и Me.Visible = False передают выполнение кода в первую форму где выполняется
Set frmF2 = Nothing
 
Получается все равно как?

И еще вопрос, при закрытии второй формы у нее (или в модуле) выполняется некий код в цикле, как его корректно прекратить с закрытием формы, чтобы не получилось что формы нет, а он продолжает работать?

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 vito



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

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #1
Добавлено: 07.11.05 15:12
Ни один из перечисленных методов не уничтожает форму. Nothing лишь "обнуляет" указатель. Форма остается в памяти и если там есть цикл он будет работать. Сборщик мусора тут не причем, потому что ресурс не освобожден.

Испоьзуй например метод Close.

Ответить

Номер ответа: 2
Автор ответа:
 Pantalone



Вопросов: 32
Ответов: 104
 Профиль | | #2 Добавлено: 07.11.05 16:40
Close какого объекта?

Ответить

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



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

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #3
Добавлено: 07.11.05 17:10
Формы.

Ответить

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



Вопросов: 32
Ответов: 104
 Профиль | | #4 Добавлено: 07.11.05 17:22
Разве есть такой метод у формы?

Ответить

Номер ответа: 5
Автор ответа:
 «UL.eXe»



ICQ: 197.895.916.247 

Вопросов: 72
Ответов: 540
 Профиль | | #5 Добавлено: 07.11.05 17:54
Разве есть такой метод у формы?

 :))

Close Form2

Ответить

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



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

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #6
Добавлено: 07.11.05 17:58
Я с NET перепутал:)

Ответить

Номер ответа: 7
Автор ответа:
 el-paso



Вопросов: 3
Ответов: 164
 Профиль | | #7 Добавлено: 07.11.05 18:15
Ага. Проблема ясна как день :-)

Если у тебя в после закрытия 2-ой формы, где-то ещё сохраняется ссылка на
эту форму (как ты говоришь, где-то выполняется код, работающий с формой), то
сама форма не может выгрузиться из памяти, пока эта ссылка
проинициализирована.

Это связано с тем, что объекты в VB используют счётчики ссылок на себя.
Когда ты какой-то переменной присваиваешь ссылку на объект, этот объект
увеличивает свой счётчик ссылок на 1, а когда эта переменная устанавливается
в Nothing, то счётчик ссылок уменьшается на единицу. Если счётчик ссылок
равен нулю, то объект самоуничтожается.

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

Ответить

Номер ответа: 8
Автор ответа:
 Pantalone



Вопросов: 32
Ответов: 104
 Профиль | | #8 Добавлено: 07.11.05 18:19
Так в общем и сделал, думал можно универсальнее как-то, взять и бац - никого нету :)

Ответить

Номер ответа: 9
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #9
Добавлено: 07.11.05 19:51
Unload. и все тут.
А цикл можно завершить, написав его соответствующим образом.
Например:
Sub ProcLoop(optional byval EndIt as boolean)
Static EndFlag As Boolean
endflag=endit
do
    'тот самый цикл
loop until endflag
end sub

А в коде формы написать.
Private Sub Form_QueryUnload(Cancel As Integer,UnloadMode As Integer)
ProcLoop EndIt:=True
End Sub

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 08.11.05 11:06
Тут весь прикол в том что у тебя за форма. Если ты её создавал, скажем, как Set Form2=New Form1, тогда выгрузить не проблема. Ежели ты юзаешь ту форму что у тебя в проекте как Form1 - выгружать без толку. Насколько можно понять, она что-то вроде GlobalMultiUse :)

Ответить

Номер ответа: 11
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #11 Добавлено: 08.11.05 21:20
А вот я знаю как форму выгрузить ;)) Абсолютно легко. Настолько легко, что прога может (и скорее всего) вылетить ;)))

DestroyWindow(hWnd as Long)

Ответить

Страница: 1 |

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



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