Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вернуть предыдущее значение контрола? / 10 сообщений из 10, страница 1 из 1
02.04.2008, 12:50
    #35229589
AlexKubrak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
Есть форма с гридом, привязанным к курсору и множеством контролов (checkbox-ы, Combobox, TextBox и т.д.) не связанных с курсором (работаю с ними через Value).
Юзер управляя контролами получает в курсор новые данные, которые может править.
Если он, например, через комбо выберет что-то, отличное от того что было курсор перезагрузится новыми данными и то что он там наисправлял потеряется, если конечно он не нажал до этого "Сохранить". По InteractiveChange() я могу проверить - сохранил или нет и предложить "Сохранить? Да, Нет, Отмена"

Внимание, вопрос! Как в случае "Отмены" вернуть состояние контрола на первоначальное?

Заранее, спасибо!
...
Рейтинг: 0 / 0
02.04.2008, 13:16
    #35229688
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
Для этого давно изобретена и работает буферизация. Обсуждалась 1001 раз и здесь, и на www.foxclub.ru Поиск в помощь.
...
Рейтинг: 0 / 0
02.04.2008, 13:39
    #35229774
AlexKubrak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
Я пользовался поиском, но обычно это вопросы о контролах связаных с таблицей и их буферизации, а то что мне надо не нашел. Может не так искал?
У меня контролы не связаны ни с какой таблицей, их более 10, многие между собой связаны "логически" через Valid().
Каким образом организовать буферизацию если контролы к ни к базе ни к курсору не подвязаны. Не ужели для каждого контрола по GotFocus() сохранять Value в кучу локальных переменных?
Вопрос скорее, касается порядка выполнения событий контрола, т.е. на каком этапе мне перехватить попытку изменения значения контрола,чтобы сделать проверку записали/не записали?
...
Рейтинг: 0 / 0
02.04.2008, 13:55
    #35229830
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
А может пересмотреть подход и таки отказаться от своей "буферизации". И контролы таки привязать к полям своих курсоров, а не переменных? Обрати внимание - даже не таблиц, а курсоров. Или в курсоры загнать данные труднее, чем в переменные?
...
Рейтинг: 0 / 0
02.04.2008, 14:33
    #35229975
gotko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
если не лень - делай пару переменных на каждый контрол-
текущее и начальное значения
при "отмена"- выставляешь начальное значение из переменной-дублера
(как ей рулить в процессе, какое ей значение присваивать при работе пользователя - определяй сам)
ИМХО - долго и нудно...
...
Рейтинг: 0 / 0
03.04.2008, 12:04
    #35232385
AlexKubrak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
Sergey Sizov.А может пересмотреть подход и таки отказаться от своей "буферизации". И контролы таки привязать к полям своих курсоров, а не переменных? Обрати внимание - даже не таблиц, а курсоров. Или в курсоры загнать данные труднее, чем в переменные?

Может я чего-то не понимаю? Комбо и так используют в качестве источника курсоры полученные с MS SQL, причем разные в зависимости от например Option1.Value. Если я по Option1 клацну у меня список другой высветиться, индекс поменяется. Вы мне предлагаете создать курсор, в котором будут храниться тот самый Option1.Value и индекс COmbo ?
Я не применяю "свою" буферизацию, на основе контролов формируется запрос. Создавать курсор для каждого контрола (у меня их с десяток) только для "отката" интерфейса ну как-то странно. Здесь помогло бы событие что-то типа ComboBox1.BeforeChange().

К сожалению ничего похожего не нашел, поэтому наверно прийдется делать примерно так:
1. В нужных контролах добавить properties OldValue
2. В GotFocus() заполнять OldValue=Value, проверять изменения, предлагать "Да", "Нет", "Отмена"
3. В Interactivechange() если "Отмена" Value=OldValue и не выполнять блок по перезагрузке курсора и т.д.
...
Рейтинг: 0 / 0
03.04.2008, 18:40
    #35234028
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
Откуда берешь первоначальное значение Value для инициализации значения Combo? ДО модификации? Разве нельзя повторно взять то же самое значение, если пользователь отказался от модификации?
...
Рейтинг: 0 / 0
04.04.2008, 13:37
    #35235745
AlexKubrak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
Ну , например, при загрузке формы начальное значение комбо "Москва".
Юзер выбирает "Киев". Исходя из этого формируется курсор,связанный с гридом и юзер в гриде просматривает и правит данные (прайс-лист). Потом, забыв сохранить то что он там на исправлял, он в комбо выбирает "Симферополь". Перед загрузкой данных для Симферополя я проверяю, если есть не сохраненные изменения - выводу диалог "Сохранить? Да, Нет, Отмена". Если Отмена естественно курсор не перезагружаю, НО В КОМБО УЖЕ ВЫБРАН "Симферополь", а в гриде отображаются данные "Киева".

Это примитивный пример, так как есть еще комбо на список типов товара, который в разных городах разный, т.е. при выборе города перезагружается еще один комбо. Там еще много чекбоксов, оптионс, около десятка контролов. Можно конечно им делать Disable пока не сохранит, но это как-то не правильно.
...
Рейтинг: 0 / 0
04.04.2008, 15:06
    #35236063
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
По большому счету, даже в случае привязки к данным все-равно останется только сохранение значения до модификации и сравнение со значением после. Например, в свойстве TAG объекта или, как Вы и предложили, в специально созданном свойстве OldValue (свойство TAG только символьного типа).

Так что, описанное Вами решение, по сути, единственно возможное. Привязка к данным здесь ничего не изменит.
...
Рейтинг: 0 / 0
04.04.2008, 15:46
    #35236249
AlexKubrak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть предыдущее значение контрола?
Да, я так и понял, спасибо!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вернуть предыдущее значение контрола? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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