Страница: 1 |
Страница: 1 |
Вопрос: Как правильно завершать программы?
Добавлено: 23.12.05 14:45
Автор вопроса: Glyckmen
У меня несколько вопросов.
1. В откомпелированной программе наблюдается такое (но не всегда), что при выходе из программы она зависает (на экране остается пустая форма и в диспетчере пишется что "Не отвечает"), при выходе использую просто End.
А вообще какие еще есть способы завершения программы?
2. При нажатии на закрытие окна (Х в правом верхнем углу формы), все закрывается но сама программа остается в памяти (в диспетчере задач ее видно)код в программе такой:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) ' Обработка нажатия Х на форме
Dim perIzm As Byte
If MsgBox("Вы уверены?", vbYesNo + vbInformation, "Выход") = vbNo Then Cancel = 1
End If
If izmen = True And Cancel = 0 Then 'Если были изменения то спрашиваем про запись
If MsgBox("Данные не сохранены!" & vbCr & "Сохранить изменения?", vbYesNo + vbQuestion, "Внимание!") = vbYes Then
obrSave ' Вызов процедуры записи
End ' Завершение всей программы
End If
End If
End Sub
Здесь выход также происходит по End.
Подскажите как правильно выходить из программы по этому событию?
3. У меня в программе используются несколько форм и открываю их командой "Form.Show vbModal" и командой "Form.Hide" я их закрываю и я так понимаю что это не удаляет форму из памяти, а просто ее закрывает, а как сделать так что-бы модальная форма полностью выгружалась из памяти.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 23.12.05 14:50
2. По событию queryunload вообше не надо ничё делать, само выйдет.
3. А попробуй unload form сделать, попробуй...
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 23.12.05 14:50
В самой модальной форме по нужному событию делай Unload Me. Или из Parent формы Unload ИмяФормы.
Номер ответа: 3
Автор ответа:
Glyckmen
Вопросов: 7
Ответов: 22
Профиль | | #3
Добавлено: 23.12.05 14:59
GSerg В том то и дело что по событию queryunload программа, форма и все что связано с программой с экрана исчезают (как я понимаю закрываются), НО в диспетчере задач (ALT-CTRL-DEL) моя программа присутсвует с надписью "Работает", при этом она не востанавливается, а просто там висит и отжирает память, а если я запускаю пять копий программы (вообще мне иногда надо когда несколько копий проги работают).
Номер ответа: 4
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #4
Добавлено: 23.12.05 15:05
Попробуй написать End в событии Form_Unload (а не QueryUnload).
Проверь подпрограмму сохранения настроек.
И почему вызываешь End только когда пользователь выберет сохранение перед выходом? что, если он не хочет сохраняться, не завершать прогу что-ли?
Номер ответа: 5
Автор ответа:
Glyckmen
Вопросов: 7
Ответов: 22
Профиль | | #5
Добавлено: 23.12.05 15:21
VictorЗдесь в событии QueryUnload если Cancel=0 то выход происходит в любом случае при достижении End Sub, просто я поставил End там для проверки что в любом варианте (хоть ты записываешься хоть нет) программа после выхода все равно сидит в памяти.
Номер ответа: 6
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 23.12.05 15:28
Ты всё-таки сделай то, что я ответил в п.3...
Номер ответа: 7
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #7
Добавлено: 23.12.05 15:29
Для каждой твоей формы, забил добавить...
Номер ответа: 8
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #8
Добавлено: 23.12.05 15:30
Внимательней читайте, вам дело говорят. Form.Hide не закрывает форму, а только делает её временно невидимой. Т.е., если напечатать в текстбоксе, потом Form.Hide, потом снова Form.Show vbModal, то набранный текст буде на месте. Из-за этого скорее всего и нет корректного закрытия программы. А вообще может много других причин быть, это надо весь код полностью смотреть и тестить.
Номер ответа: 9
Автор ответа:
Glyckmen
Вопросов: 7
Ответов: 22
Профиль | | #9
Добавлено: 23.12.05 15:35
Все спасибо! Пока Unload работает, в памяти ничего не остается, но вот если будут проблемы по п.1 то я отпишусь.