|
|
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
Есть ItemChanged , он вызывает отдельную ф-цию F, которая занимается обработкой введенного значения. Есть кнопка в окошке вместе с этим datawindow, она запускает AcceptText. А AcceptText, в свою очередь снова запускает ItemChanged. Как бы красиво обойти этот казус? Надо, чтобы при AcceptText событие ItemChanged не отрабатывало ф-цию проверки F. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 16:34 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
А AcceptText, в свою очередь снова запускает ItemChanged AcceptText НЕ запускает ItemChanged. Ищи проблему в другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 16:51 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
Riska А AcceptText, в свою очередь снова запускает ItemChanged AcceptText НЕ запускает ItemChanged. Ищи проблему в другом. Events AcceptText may trigger an ItemChanged or an ItemError event. и это так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 16:59 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
я поясню - Accepttext запускает ItemChanged, если вы изменили чего нить в поле, но не вышли табуляцией из него, а сразу нажали ту самую кнопочку, через клик которой и запускается Accepttext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 17:34 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
А в чем казус-то? Если Вам не надо делать проверку - уберите вызов функции из ItemChanged Если Вам надо делать проверку - пусть она и происходит по Clicked -> AcceptText() -> ItemChanged() Если вам надо чтоб проверка тут отрабатывала, а там не отрабатывала - то у Вас скорее всего серъезные проблемы с дизайном, но все равно никто не мешает сделать "затычку" в виде переменной IgnoreFuncCall которая в clicked ставится в True перед AcceptText и ItemChanged в этом случае пропускает проверку, а потом IgnoreFuncCall где-то где там Вам надо сбрасывается обратно в False. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 18:19 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
Верно. В данном случае, при нажатии на кнопку, произойдет событие ItemChanged. Но это не повлечет за собой срабатывания события дважды. Т.е. СНОВА ничего не запустится. 1. Попробуй перенести AcceptText на функцию. 2. Можно перенести скрипт из ItemChanged в EditChanged(это в зависит от конкретной задачи). 3. Если после срабатывания функции происходит ItemChanged, то можно внести флаг в функцию (проверка, что AcceptText уже выполнен). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 18:31 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейА в чем казус-то? Если Вам не надо делать проверку - уберите вызов функции из ItemChanged Если Вам надо делать проверку - пусть она и происходит по Clicked -> AcceptText() -> ItemChanged() Если вам надо чтоб проверка тут отрабатывала, а там не отрабатывала - то у Вас скорее всего серъезные проблемы с дизайном, но все равно никто не мешает сделать "затычку" в виде переменной IgnoreFuncCall которая в clicked ставится в True перед AcceptText и ItemChanged в этом случае пропускает проверку, а потом IgnoreFuncCall где-то где там Вам надо сбрасывается обратно в False. Укажите что с дизайном не так: имеем n полей в датавинд. ItemChanged проверяет введенные данные посредством ф-ции из него запускаемой и ф-ция эта выдает сообщение что за поле и что туда надо бы ввести. Если провести некоторые изменения в поле и не выйти из него, то ДВ считает, что оно не изменилось. чтоб избежать необходимости щелкать табом, я перед сохранением запускаю AcceptText. Если поле было введено неправильно, но пользователь не щелкнул табом, а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно. насчет булевой переменной была такая идея, но это не очень красивое решение, подумал, может еще чего подскажут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 18:56 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
RiskaВерно. В данном случае, при нажатии на кнопку, произойдет событие ItemChanged. Но это не повлечет за собой срабатывания события дважды. Т.е. СНОВА ничего не запустится. 1. Попробуй перенести AcceptText на функцию. 2. Можно перенести скрипт из ItemChanged в EditChanged(это в зависит от конкретной задачи). 3. Если после срабатывания функции происходит ItemChanged, то можно внести флаг в функцию (проверка, что AcceptText уже выполнен). ItemChanged сработает дважды - сам по себе + через AcceptText 1. - невозможно 2. - это быдет долго да и не работал я с EditChanged 3. - уже ответил выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 18:59 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
_serjj_а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно. Интересно откуда взялся первый ItemChanged. Поставьте breakpoint и посмотрите Call Stack. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 19:26 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрей _serjj_а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно. Интересно откуда взялся первый ItemChanged. Поставьте breakpoint и посмотрите Call Stack. первый берется после того как вы провели изменение в поле и нажали кнопку. Поле теряет фокус и срабатывает ItemChanged для ДВ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 09:31 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
_serjj_ ЗоринАндрей _serjj_а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно. Интересно откуда взялся первый ItemChanged. Поставьте breakpoint и посмотрите Call Stack. первый берется после того как вы провели изменение в поле и нажали кнопку. Поле теряет фокус и срабатывает ItemChanged для ДВ. сорри, первый раз ItemChanged запускает AcceptText, второй раз срабатывает ItemChanged сам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 09:58 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
При нажатии на кнопку никакого вызова ItemChanged() не происходит, т.к. теряется не фокус поля, а фокус DataWindow. В кнопке прописывается AcceptText для DataWindow именно для того, чтобы вызвать срабатывание ItemChanged() для того поля, которое не отработало. Вызов, если я правильно понял, AcceptText из ItemChanged() надо убрать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 11:04 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
ytrewqПри нажатии на кнопку никакого вызова ItemChanged() не происходит, т.к. теряется не фокус поля, а фокус DataWindow. В кнопке прописывается AcceptText для DataWindow именно для того, чтобы вызвать срабатывание ItemChanged() для того поля, которое не отработало. Вызов, если я правильно понял, AcceptText из ItemChanged() надо убрать в ItemChanged() я не вызываю AcceptText. или я вас неправильно понял. вот скрипт для ItemChanged: integer li_return li_return = uf_validrules_construction(dwo.name,data) if li_return=0 then w_comercial_main.cb_1.enabled=true return li_return ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 11:33 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
_serjj_ сорри, первый раз ItemChanged запускает AcceptText, второй раз срабатывает ItemChanged сам что значит "срабатывает сам" ? вызвали AcceptText, сработал ItemChanged, выдал ошибку, AcceptText вернул -1, процесс сохранения прекращаем. с чего он вдруг сам то сработал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 12:41 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
_serjjУкажите что с дизайном не так: имеем n полей в датавинд. ItemChanged проверяет введенные данные посредством ф-ции из него запускаемой и ф-ция эта выдает сообщение что за поле и что туда надо бы ввести. Если провести некоторые изменения в поле и не выйти из него, то ДВ считает, что оно не изменилось. чтоб избежать необходимости щелкать табом, я перед сохранением запускаю AcceptText. Если поле было введено неправильно, но пользователь не щелкнул табом, а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно. Вам уже указывали, в чем Ваша проблема - то, что выделено Красненьким, не может быть. Ищите ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 12:51 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрей _serjj_ сорри, первый раз ItemChanged запускает AcceptText, второй раз срабатывает ItemChanged сам что значит "срабатывает сам" ? вызвали AcceptText, сработал ItemChanged, выдал ошибку, AcceptText вернул -1, процесс сохранения прекращаем. с чего он вдруг сам то сработал? ItemChanged не выдаёт ошибку, его единственное предназначение - возврат. что он возвращает зависит от ф-ции, которая в нем запускается. Эта ф-ция проверяет, удовлетворяет ли введеное значение условиям задачи. срабатывеет сам - то есть автоматически, без моего вмешательства ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 13:23 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
_serjj_срабатывеет сам - то есть автоматически, без моего вмешательства Да Вы сказочник, уважаемый. В тот ли форум Вы попали ? А по серьезному - Вам уже советовали проверить дебаггером, чего там делается. Ежели для Вас и слово дебаггер ни о чем не говорит, ну ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 20:18 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
Kак делаю я. 1.Ставлю валидацию на itemchanged: example: choose case i_s_itemchanged_col_name case 'gl_account_no' l_row = f_check_for_dups(dw_1, 'gl_account_no', data) IF l_row <> 0 THEN s_error_string = "'" + 'GL account: ' + data + ', is already being used.' + "'" This.Modify("gl_account_no.ValidationMsg = " + s_error_string) RETURN 1 END IF end choose если юзверь табаут нифига не получитса. 2. В save event, пишем типа: IF NOT dw_1.fu_accepttext() THEN RETURN // команда о апдейте в БД не отправляетса .. END IF IF f_required_fields (dw_1) <> 1 THEN RETURN // команда о апдейте в БД не отправляетса ... END IF b_status = dw_1.fu_update() IF NOT b_status THEN MessaGeBox(This.Title, 'бла-бла-бла', Exclamation!) .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 20:34 |
|
||
|
ItemChanged - AcceptText
|
|||
|---|---|---|---|
|
#18+
1. Напишите в DW на событии ItemChanged messagebox('', ''), поставьте на окно кнопку без кода. 2. Теперь сделайте изменение в DW и нажмите таб. Должен выскочить message. 3. Теперь сделайте изменение в DW и нажмите на кнопку. Ничего не должно произойти. 4. Теперь на кнопке напишите AcceptText. Сделайте изменения в DW и нажмите на кнопку. Должен выскочить message. Так эта ерунда работает. Если нет, то надо искать ошибку в скрипте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2006, 09:36 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=33926871&tid=1337635]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 457ms |

| 0 / 0 |
