powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перед закрытием формы спрашивать и... оставлять как было.
17 сообщений из 17, страница 1 из 1
Перед закрытием формы спрашивать и... оставлять как было.
    #32650529
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует такая задача:
Есть форма, на ней кнопки: Сохранить, Сохранить и выйти, Выйти не сохраняя.
Кнопка закрытия формы заблокирована и недоступна.

Цель разблокировать кнопку закрытия и корректно спросить у пользователя
варианты дальнейших действий при нажатии на нее, т.е.

Если какие то данные в форме были изменены, то спросить
Сохранить данные? (Да, нет, отмена)
С да и нет вроде бы все понятно, сохраняем или не сохраняем и выходим.
При отмене возращаемся в форму (надо вернутся в то состояние которое было) т.е. если данные редактировались, то надо предоставить возможность их отмены. В этом случае (когда данные редактировались, свойство me.Dirty=True (после сохранения и до редактирования оно me.Dirty=False)

Но вот какая проблема, если вешаем весь этот код с проверкой и сообщениями на событие выгрузки формы (onUnload), то свойство Dirty уже становится не актуально, т.е. даже если мы не закроем форму, то запись уже сохранена...

На какое событие мне повесить весь этот код, или как реализовать все это иначе чтоб при возвращении в форму все было так как оставили, т.е. если данные были изменены и несохранены, то так и осталось при возвращении.

Если это вешать на событие AfterUpdate, то как мне узнать, что этот AfterUpdate инициирован функцией закрывающей форму.

Буду благодарен если кто подскажет какие нибудь идеи.
Спасибо.
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650605
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OnClose
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650625
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TatianaTOnClose
Событие OnClose наступает после события onUnload
и отменить его нельзя!
или я ошибаюсь?
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650649
tatiana_y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
закрытие формы по кнопке закрытия, если данные были изменены, вызовет обработку события "До обновления". Проще всего повесить на BeforeUpdate запрос на подтверждение сохранения или отмену изменений:

If MsgBox("Сохранить изменения?", vbQuestion + vbYesNo, "Внимание") = vbNo Then Me.Undo
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650652
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне хотелось бы именно вариант с закрытием
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650681
tatiana_y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант с закрытием - после вызова события OnClose (по кнопочке закрытия) иметь возможность оставить форму открытой? Так, кажется нельзя, ведь нет возможность сделать cancel=true. Если обязательно нужна кнопка закрытия, можно сделать ее имитацию - свойсво формы - без границ, и сверху нарисовать псевдографикой свою кнопку закрытия. А на нее (на нажатие) уже вещать , что угодно.
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650702
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты вообще не проверяй Dirty! А все проверяй на BeforeUpdate. При попытке закрыть форму, находящуюся в состоянии редактирования, прежде всего сработает BeforeUpdate
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650722
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tatiana_yВариант с закрытием - после вызова события OnClose (по кнопочке закрытия) иметь возможность оставить форму открытой? Так, кажется нельзя, ведь нет возможность сделать cancel=true. Если обязательно нужна кнопка закрытия, можно сделать ее имитацию - свойсво формы - без границ, и сверху нарисовать псевдографикой свою кнопку закрытия. А на нее (на нажатие) уже вещать , что угодно.

Зачем такие сложности?
Определить на форме MinMaxButtons = 0, ControlBox = No, CloseButton = Noда еще добавить

Код: plaintext
1.
2.
3.
Private Sub Form_Close()
DoCmd.CancelEvent

End Sub


и попробуйте вообще закрыть форму!
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650754
tatiana_y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТАк если убрать все кнопки , кнопки закрытия же вообще не будет, а , я так поняла, стоит задача именно визуально закрывать форму через крестик без всяких лишних кнопок
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650757
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таки нет - он хочет закрывать форму своей кнопкой:

Код: plaintext
1.
Есть форма, на ней кнопки: Сохранить, Сохранить и выйти, Выйти не сохраняя.
Кнопка закрытия формы заблокирована и недоступна
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650778
tatiana_y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и строчной ниже
Цель разблокировать кнопку закрытия и корректно спросить у пользователя
варианты дальнейших действий при нажатии на нее, т.е.
Автор, наверное, просто угорает над веткой:))
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650834
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТаки нет - он хочет закрывать форму своей кнопкой:
Свои кнопки у меня работают, я их описал.
а крестик , т.е. стандартная кнопка закрытия окна - заблокирован.

Мне надо задействовать этот крестик. И если юзверь нажал на него то спросить что он, юзверь желает. ИИ если пользователь ошибся, то вернутся в ворму и шоб там було усе як було...
т.е. форма должна остатся в том состоянии как и до выхода.
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650846
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryА ты вообще не проверяй Dirty! А все проверяй на BeforeUpdate. При попытке закрыть форму, находящуюся в состоянии редактирования, прежде всего сработает BeforeUpdate

А как мне узнать что именно этот BeforeUpdate вызван процедурой закрытия...
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650861
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry Таки нет - он хочет закрывать форму своей кнопкой:
авторЕсть форма, на ней кнопки: Сохранить, Сохранить и выйти, Выйти не сохраняя.
Кнопка закрытия формы заблокирована и недоступна

Я именно хочу задействовать стандартный крестик.

На сколько я знаю закрите формы имеет такую цепочку.
после обновления afterupdate
выгрузка Unload
закрытие close

я тут вижу 2 варианта решения моей проблемы:
1. Есть событие которое возникает раньше всех перечисленных выше
и однозначно, что это событие участвует в цепочке событий по
закрытию формы
2. Или на afterupdate как то определить, что форма собирается закрыватся...

??????????????? что скажете ????????
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32650954
мдя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1/ чтобы отменить закрытие -надо с неизбежностью проверять в
OnUnload (тогда и закрытие по {Ctrl}+{F4} перекрывается, и значения переменных формы еще не очищены).

2/ чтобы откатить (при этом) изменения - потребуется хапать/очищать данные (об OldValue) на (первом после Current) BeforeUpdate в некие переменные формы и, возможно, устанавливать флаги.

3/ Есть вариант накопления массивов OldValue() на всех BeforeUpdate после прохождения Current, и пошаговом откате, но потребуется продумать диалог пошаговой откатки.

4/ Проблема в логике откатов могабыть неприятной при правке той же записи в параллельных сеансах других юзеров.
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32651061
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно ли определить новое собитие для формы ?

помоему я это где то встречал
допустим определить новое событие
OnCloseButtonDown
и в перед, кнопка нажата, но еще ни чего ни кто не делал, вот в этот то момент...
Короче это тема нового топика.
...
Рейтинг: 0 / 0
Перед закрытием формы спрашивать и... оставлять как было.
    #32651096
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если использовать BeginTrans/RollbackTrans? При нажатии кнопки "Сохранить" делаем CommitTrans, во всех остальных -- RollbackTrans.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перед закрытием формы спрашивать и... оставлять как было.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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