powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
12 сообщений из 12, страница 1 из 1
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908330
S0ME0NE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здрасьте.
Цель такая: если пользователь нажал кнопку закрыть окно , то надо прервать цикл, и всё закрыть и завершить программу

Есть глобальная переменная rabota , перед началом цикла она истина
программа, например, читает таблицу,

скажем есть цикл
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    Do Until RS.EOF()
        i = i + 1
        If rabota = False Then Exit Do
        If (i Mod 10) = 0 Then
            DoEvents
        End If
        ...
        RS.MoveNext
    Loop
    
    RS.Close:   Set RS = Nothing
    db.Close:   Set db = Nothing

благодаря команде DoEvents пользователь всё-таки может нажать на форме системную кнопку ЗАКРЫТЬ X

в процедуре Form_QueryUnload я пишу
Код: vbnet
1.
2.
3.
4.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    rabota = False
    DoEvents
End Sub

но цикл по всей видимости не прерывается и программа где-то висит в памяти, хотя на экране форма не видно

Подскажите что-нибудь. Спасибо.
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908367
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S0ME0NEно цикл по всей видимости не прерываетсяа именно?
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908386
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот набросал проверку, все работает:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Option Explicit

Dim rabota As Boolean

Private Sub Command1_Click()

rabota = True
Debug.Print "Цикл начался"
Do While rabota
  DoEvents
Loop
Debug.Print "Цикл корректно прерван"


End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

rabota = False
DoEvents

End Sub
Private Sub Form_Terminate()

Debug.Print "Форма убилась"

End Sub
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908394
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя после строки db.Close: Set db = Nothing и перед End Sub есть какие-нить операторы, обращающиеся к объектам формы, могут быть проблемы (форма загрузится повторно)
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908436
S0ME0NE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
да Вы правы, цикл прерывается

у меня Win XP sp3, а программа откомпилирована VB6.5

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    rabota = False
    DoEvents
Я ДОБАВИЛ
Unload me
End
End Sub


и программа стала выгружаться из памяти компьютера

Благодарю Вас
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908461
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то это криво весьма. Unload Me в QueryUnload не нужен, так как форма и так находится в состоянии выгрузки. А End не выгружает форму, а просто грубо прерывает выполнение программы. То есть лечение головной боли гильотинированием.
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908540
S0ME0NE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProВообще-то это криво весьма. Unload Me в QueryUnload не нужен, так как форма и так находится в состоянии выгрузки. А End не выгружает форму, а просто грубо прерывает выполнение программы. То есть лечение головной боли гильотинированием.Если убрать Unload me из этой процедуры/события, то программа остаётся в памяти компьютера. Хотя она исчезает с экрана.
Подскажите пожалуйста как быть в этом случаи.
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908577
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S0ME0NE,

12979956
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908587
S0ME0NE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оставил только команду End
а в той самой процедуре с циклом, убрал всё лишнее перед Exit Sub

Большое спасибо Shocker.Pro
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908593
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, я в таких случаях вообще использую другой алгоритм. Я запрещаю выгрузку формы в QueryUnload (Cancel=True), потом завершаю все нужные действия (циклы там и т.п.) и потом уже выгружаю форму из кода.
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37908598
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S0ME0NEОставил только команду End Не надо! End завершает программу, а не выгружает форму. При корректном программировании она НЕ нужна.
...
Рейтинг: 0 / 0
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
    #37913893
S0ME0NE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро. Эта программка запускается в назначенных заданиях и завершается по окончанию цикла
поэтому я и пишу команду End
Если есть другие варианты, то поделитесь пожалуйста.
Спасибо.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]