Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перед закрытием формы спрашивать и... оставлять как было. / 17 сообщений из 17, страница 1 из 1
16.08.2004, 11:36:32
    #32650529
Soldat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перед закрытием формы спрашивать и... оставлять как было.
Существует такая задача:
Есть форма, на ней кнопки: Сохранить, Сохранить и выйти, Выйти не сохраняя.
Кнопка закрытия формы заблокирована и недоступна.

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

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

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

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

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

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

If MsgBox("Сохранить изменения?", vbQuestion + vbYesNo, "Внимание") = vbNo Then Me.Undo
...
Рейтинг: 0 / 0
16.08.2004, 12:19:28
    #32650652
Soldat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перед закрытием формы спрашивать и... оставлять как было.
мне хотелось бы именно вариант с закрытием
...
Рейтинг: 0 / 0
16.08.2004, 12:27:11
    #32650681
tatiana_y
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перед закрытием формы спрашивать и... оставлять как было.
Вариант с закрытием - после вызова события OnClose (по кнопочке закрытия) иметь возможность оставить форму открытой? Так, кажется нельзя, ведь нет возможность сделать cancel=true. Если обязательно нужна кнопка закрытия, можно сделать ее имитацию - свойсво формы - без границ, и сверху нарисовать псевдографикой свою кнопку закрытия. А на нее (на нажатие) уже вещать , что угодно.
...
Рейтинг: 0 / 0
16.08.2004, 12:34:59
    #32650702
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перед закрытием формы спрашивать и... оставлять как было.
А ты вообще не проверяй Dirty! А все проверяй на BeforeUpdate. При попытке закрыть форму, находящуюся в состоянии редактирования, прежде всего сработает BeforeUpdate
...
Рейтинг: 0 / 0
16.08.2004, 12:42:57
    #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
16.08.2004, 12:56:14
    #32650754
tatiana_y
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перед закрытием формы спрашивать и... оставлять как было.
ТАк если убрать все кнопки , кнопки закрытия же вообще не будет, а , я так поняла, стоит задача именно визуально закрывать форму через крестик без всяких лишних кнопок
...
Рейтинг: 0 / 0
16.08.2004, 12:57:38
    #32650757
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перед закрытием формы спрашивать и... оставлять как было.
Таки нет - он хочет закрывать форму своей кнопкой:

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

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

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

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

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

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

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

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

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

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

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


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