Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла. / 12 сообщений из 12, страница 1 из 1
08.08.2012, 11:00
    #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
08.08.2012, 11:12
    #37908367
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
S0ME0NEно цикл по всей видимости не прерываетсяа именно?
...
Рейтинг: 0 / 0
08.08.2012, 11:18
    #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
08.08.2012, 11:20
    #37908394
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
Если у тебя после строки db.Close: Set db = Nothing и перед End Sub есть какие-нить операторы, обращающиеся к объектам формы, могут быть проблемы (форма загрузится повторно)
...
Рейтинг: 0 / 0
08.08.2012, 11:31
    #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
08.08.2012, 11:41
    #37908461
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
Вообще-то это криво весьма. Unload Me в QueryUnload не нужен, так как форма и так находится в состоянии выгрузки. А End не выгружает форму, а просто грубо прерывает выполнение программы. То есть лечение головной боли гильотинированием.
...
Рейтинг: 0 / 0
08.08.2012, 12:05
    #37908540
S0ME0NE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
Shocker.ProВообще-то это криво весьма. Unload Me в QueryUnload не нужен, так как форма и так находится в состоянии выгрузки. А End не выгружает форму, а просто грубо прерывает выполнение программы. То есть лечение головной боли гильотинированием.Если убрать Unload me из этой процедуры/события, то программа остаётся в памяти компьютера. Хотя она исчезает с экрана.
Подскажите пожалуйста как быть в этом случаи.
...
Рейтинг: 0 / 0
08.08.2012, 12:22
    #37908577
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение? Пользователь жмёт по крестику, в момент работы цикла.
S0ME0NE,

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

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


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