Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
ВнизКак реализовать? Найти похожие ветки
← →
Big Error (2003-10-21 10:35) [0]В принципе, все просто - есть форма, на ней три десятка полей и кнопки Ok и Cancel. При нажатии на Cancel, если хоть одно поле формы изменялось, нужно вывести что-то типа "Уверены, что хотите отменить?"
Так вот, вопрос в том, как красиво отследить изменения в полях?
В лоб придумывается только пока одно - повесить на каждое поле обработчик события OnChange и по нему изменять некий флаг. Но ИМХО некрасиво это. Может наука другие методы нашла? Подскажите, пожалуйста.
← →
Digitman (2003-10-21 10:42) [1]
> Но ИМХО некрасиво это
почему же это "некрасиво" ? вполне разумое и эффективное решение !
← →
lasso (2003-10-21 10:44) [2]я конечно лам в делфях но не легче написать процедурку?
или я глупость опять сказал?!...:(
← →
REA (2003-10-21 10:46) [3]Вариант 1: Можно еще более тупо попробовать: сделать преобразование главной панели формы (не самой, потому что у нее координаты меняются) в текст (как в примере из справки) и сравнивать этот текст до и после. Тут правда нужно, чтобы остальные характеристики (enabled) тоже совпадали.
Вариант 2: пройтись по форме и сделать строку - сумму полей и сравнивать до и после.
← →
lasso (2003-10-21 10:50) [4]procedute testedit(a:tedit);
begin
a.onchange //тра ля ля
end;
вызывать testedit(edit1.name);
пытаюсь первый раз в жизни ответить на вопрос так что 90% что это не правильно...;)
← →
lasso (2003-10-21 10:51) [5]судя по ответу rea я глупость сказал....;(
← →
Ihor Osov'yak (2003-10-21 10:52) [6]Я делаю примерно так.
В диалоговых формах, где предусмотрен ввод, есть две процедуры, примерно вида SetData(const aPrm: TMyInfoStruc) и GetData(var aPrm: TMyInfoStruc), первая устанавливает значения контролов в соотв. с данными, вторая - перегоняет данные с контролов в соотв. параметр.. Первая - также в приватном поле сохраняет копию aPrm.. (конечно, можно сделать и проперти, иногда и так делаю).
Так вот, перед закрытием формы (или при сабмите, или при откате - это уже зависит от логики диалога) с помощью GetData делается запрос новых значений, и сравнивается с той копией начальных значений, что была сохранена SetData.. Естественно, для TMyInfoStruc должны быть функции сравнения..
В зависимости от результата сравнения может быть вопрос к юзеру..
Работы от такого подхода прибавляется незначительно, так как функциональность SetData и GetData в том или ином виде присутствует практически в любой диалоговой форме... А читабельность и "сопровождаемость" кода выигрывает..
← →
Ihor Osov'yak (2003-10-21 10:55) [7]зы - а согласно [1] Digitman © (21.10.03 10:42) - или когда очень спешу, или проект ачень маленький, несколько формочек..
← →
Hooch (2003-10-21 10:56) [8]делай как описал, нормальное решение, тем более что кода будет 3 строчки
← →
Digitman (2003-10-21 11:01) [9]
> Ihor Osov"yak
имелось ввиду, что при старте формы в цикле по нужной группе контролов назначить один и тот же обработчик..
т.е. все что требуется - написать собственно обработчик и процедуру с циклом внутри, где этот обработчик будет назначаться всем существующим на этот момент контролам, отвечающим данному требованию по функц-ти их использования
← →
Ihor Osov'yak (2003-10-21 11:06) [10]2 [9] Digitman © (21.10.03 11:01)
И такое тоже юзали :-)..
Но здесь (как и при решении "в лоб") - юзер может изменить значение, а потом возраться к первоначальному ручками.. Данные в результате не изменены, а влажок будет установлен.. Так что [6], несмотря на некоторую трудоемкость, имеет в этом отношении маленькое преимущество..
← →
Big Error (2003-10-21 11:09) [11]> Digitman
Один и тот же обработчик не получится, потому что, во-первых, не у всех контролов есть OnChange (у TCheckBox, например, нет), а во-вторых, у некорых контролов уже стоят обработчики OnChange, где выполняются другие действия.
Да, видимо придется просто в каждый обработчик добавлять изменение флага, чуда не произошло, наука не дошла до более красивого способа. :))
← →
app (2003-10-21 11:17) [12]Лучше чем Old<>New врядли придумаешь, при том чтоббы была гарантия действительного изменения данных
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c