|
|
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста! На форме множество ТекстБоксов. Пользователь изменил значение нескольких (или одного), не сохранил и пытается закрыть форму. Как с минимальными затратами это отследить? Может у формы есть к.л. свойство? Или нужно все анализировать вручную? Я делала так: в ините формы добавляла свойства, в которые записывала "старые" значения контролов, а на выходе сравнивала их с "новыми". Но может можно как-то более эффективно" VFP9, WinXPSP2 Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 08:11 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
В событии QueryUnload формы (класса) вызови метод формы (класса), котороый будет проверять, были ли изменения в текущем Control и фиксировать его. Этот код я взял из примера самого VFP: Код: plaintext 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. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 08:19 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
Hi JuniorFoxik! Если нет курсора и нет буферизации - то только "руками" - сохраняя старое значение, сравнивая с новым и т.п. - т.е. по сути повторяя то что делает буферизация. Если же есть курсор и контролы на форме привязаны к полям этого курсора, то достаточно проверить GETNEXTMODIFIED(0) # 0 - это если записей много и правиться могут любые из них - или в строчке возвращённой GETFLDSTATE(-1) искать циферки отличные от 1 (как искать уж сам решай - можно по поиску вхождения, можно сравнивая с эталонной строкой состоящей из нужного числа единиц). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 02:18 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
JuniorFoxik...На форме множество ТекстБоксов. Пользователь изменил значение нескольких (или одного), не сохранил и пытается закрыть форму. Как с минимальными затратами это отследить?...На мой взгляд нужно разобрать еще случай: user изменил контролы, но информацию нехочет сохранять. Поэтому я лично поступаю так: на форме блокирую крестик (в правом верхнем углу формы) и ставлю на форму две кнопки <Принять> и <Отмена>, с выходом по клавише Esc на <Отмена>. И на Click-е кнопки <Принять> делаю сохранение. Поэтому твой вопрос: "Как с минимальными затратами это отследить?" У меня решается принятием решения самим User-ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 06:56 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
Я привел пример, который не дает потерять изменения в текущем Control А что касается всех изменений, то я поступаю так: 1. Форма ( точнее класс) имеет свойство lAllowEdits, которое по умолчанию .F. 2. Каждый Control на форме создан от класса, который имеет в событии InteractiveChange код: THISFORM.lAllowEdits = .F. THISFORM.RefreshToolBars() 3. Код метода RefreshToolBars проверяет свойство lAllowEdits и включает или выключает доступность кнопок Save, Undo и New 4. В событии QueryUnload формы (класса) есть код, котороый проверяет свойство формы lAllowEdits и выводит соответствующий диалог с пользователем на предмет сохранение изменений. Собственно говоря, это событие для этих целей и введено разработчиками в базовый класс Form. 5. Свойство lAllowEdits сбрасывается при Save и Undo и также взводится при добавлении новой записи. В принципе, все это хорошо описано в документации и примерах к VFP (начиная с версии VFP 3.0). Так, как все мои приложения на VFP являются клиентской частью приложения клиент-сервер (только pass-through), то я использую именно такой способ фиксации изменений пользователя, а не GETNEXTMODIFIED и пр. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 11:28 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
Aleksey-K А что касается всех изменений, то я поступаю так: 1. Форма ( точнее класс) имеет свойство lAllowEdits, которое по умолчанию .F. 2. Каждый Control на форме создан от класса, который имеет в событии InteractiveChange код: THISFORM.lAllowEdits = .F. THISFORM.RefreshToolBars() 3. Код метода RefreshToolBars проверяет свойство lAllowEdits и включает или выключает доступность кнопок Save, Undo и New Алексей. Вот так безусловно сразу в .F. Код: plaintext и если не секрет приведите код метода THISFORM.RefreshToolBars() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 12:35 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
В методе THISFORM.RefreshToolBars() обновляются специфические для формы кнопки и вызывается метод Refersh главного ToolBar (создан на основе класса Container и ряда кнопок класса commandbutton) на котором и присутствуют кнопки Save, Undo, New и пр. общие для всех форм кнопки. Так, что имеет смысл привести код имеено метода Refresh главной панели инструментов, которая присутст. почти на всех моих формах: Код: plaintext 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 13:28 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
Алексей. Спасибо. Ещё вопрос, кто и как взводит свойства, например вот эти Код: plaintext 1. 2. 3. 4. 5. 6. Почему такой пристальный интерес, как раз сейчас пределываю свой FW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 13:46 |
|
||
|
(Закрытие формы) А значения контролов были изменены
|
|||
|---|---|---|---|
|
#18+
А в каждой форме приходится взводить свойства по разному, но как правило это выглядит след. образом: .lAllowEXCEL = !EOF() .PrintEnabled = !EOF() .lAllowNew = .F. в методе добавления новой строки и .T. при операции Save или Undo .lAllowDelete - сильно зависит от самой формы: EOF(), права пользователя на удаление и пр. , а также = .F. если не зафиксировано изменения. .lAllowFind - устанавливается на этапе дизайна формы и определяется наличием (или отсутствием) метода поиска для данной формы. .Closable - меняется программно для искл. закрытия формы, когда выполняется что-то, что не позволяет закрыть форму (типа асинхронный SQL запрос). THIS.cmdReload.Enabled почти всегда равен .T. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 14:21 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33578625&tid=1592198]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 472ms |

| 0 / 0 |
