Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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-сайт: vt-dbnz.narod.ru
 Профиль | | #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
НО в диспетчере задач (ALT-CTRL-DEL) моя программа присутсвует с надписью "Работает"

Ты всё-таки сделай то, что я ответил в п.3...

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #7 Добавлено: 23.12.05 15:29
Для каждой твоей формы, забил добавить...

Ответить

Номер ответа: 8
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #8
Добавлено: 23.12.05 15:30
3. А попробуй unload form сделать, попробуй...

Внимательней читайте, вам дело говорят. Form.Hide не закрывает форму, а только делает её временно невидимой. Т.е., если напечатать в текстбоксе, потом Form.Hide, потом снова Form.Show vbModal, то набранный текст буде на месте. Из-за этого скорее всего и нет корректного закрытия программы. А вообще может много других причин быть, это надо весь код полностью смотреть и тестить.

Ответить

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



Вопросов: 7
Ответов: 22
 Профиль | | #9 Добавлено: 23.12.05 15:35
Все спасибо! Пока Unload работает, в памяти ничего не остается, но вот если будут проблемы по п.1 то я отпишусь.

Ответить

Страница: 1 |

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



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