powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / ItemChanged - AcceptText
19 сообщений из 19, страница 1 из 1
ItemChanged - AcceptText
    #33925549
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ItemChanged , он вызывает отдельную ф-цию F, которая занимается обработкой введенного значения. Есть кнопка в окошке вместе с этим datawindow, она запускает AcceptText. А AcceptText, в свою очередь снова запускает ItemChanged. Как бы красиво обойти этот казус? Надо, чтобы при AcceptText событие ItemChanged не отрабатывало ф-цию проверки F.
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33925660
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А AcceptText, в свою очередь снова запускает ItemChanged
AcceptText НЕ запускает ItemChanged. Ищи проблему в другом.
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33925700
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Riska А AcceptText, в свою очередь снова запускает ItemChanged
AcceptText НЕ запускает ItemChanged. Ищи проблему в другом.

Events
AcceptText may trigger an ItemChanged or an ItemError event.
и это так
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33925859
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я поясню - Accepttext запускает ItemChanged, если вы изменили чего нить в поле, но не вышли табуляцией из него, а сразу нажали ту самую кнопочку, через клик которой и запускается Accepttext
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33926013
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем казус-то?
Если Вам не надо делать проверку - уберите вызов функции из ItemChanged
Если Вам надо делать проверку - пусть она и происходит по Clicked -> AcceptText() -> ItemChanged()
Если вам надо чтоб проверка тут отрабатывала, а там не отрабатывала - то у Вас скорее всего серъезные проблемы с дизайном, но все равно никто не мешает сделать "затычку" в виде переменной IgnoreFuncCall которая в clicked ставится в True перед AcceptText и ItemChanged в этом случае пропускает проверку, а потом IgnoreFuncCall где-то где там Вам надо сбрасывается обратно в False.
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33926049
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верно. В данном случае, при нажатии на кнопку, произойдет событие ItemChanged. Но это не повлечет за собой срабатывания события дважды. Т.е. СНОВА ничего не запустится.
1. Попробуй перенести AcceptText на функцию.
2. Можно перенести скрипт из ItemChanged в EditChanged(это в зависит от конкретной задачи).
3. Если после срабатывания функции происходит ItemChanged, то можно внести флаг в функцию (проверка, что AcceptText уже выполнен).
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33926100
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрейА в чем казус-то?
Если Вам не надо делать проверку - уберите вызов функции из ItemChanged
Если Вам надо делать проверку - пусть она и происходит по Clicked -> AcceptText() -> ItemChanged()
Если вам надо чтоб проверка тут отрабатывала, а там не отрабатывала - то у Вас скорее всего серъезные проблемы с дизайном, но все равно никто не мешает сделать "затычку" в виде переменной IgnoreFuncCall которая в clicked ставится в True перед AcceptText и ItemChanged в этом случае пропускает проверку, а потом IgnoreFuncCall где-то где там Вам надо сбрасывается обратно в False.
Укажите что с дизайном не так:
имеем n полей в датавинд. ItemChanged проверяет введенные данные посредством ф-ции из него запускаемой и ф-ция эта выдает сообщение что за поле и что туда надо бы ввести. Если провести некоторые изменения в поле и не выйти из него, то ДВ считает, что оно не изменилось. чтоб избежать необходимости щелкать табом, я перед сохранением запускаю AcceptText. Если поле было введено неправильно, но пользователь не щелкнул табом, а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно.

насчет булевой переменной была такая идея, но это не очень красивое решение, подумал, может еще чего подскажут.
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33926106
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RiskaВерно. В данном случае, при нажатии на кнопку, произойдет событие ItemChanged. Но это не повлечет за собой срабатывания события дважды. Т.е. СНОВА ничего не запустится.
1. Попробуй перенести AcceptText на функцию.
2. Можно перенести скрипт из ItemChanged в EditChanged(это в зависит от конкретной задачи).
3. Если после срабатывания функции происходит ItemChanged, то можно внести флаг в функцию (проверка, что AcceptText уже выполнен).

ItemChanged сработает дважды - сам по себе + через AcceptText
1. - невозможно
2. - это быдет долго да и не работал я с EditChanged
3. - уже ответил выше
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33926151
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_serjj_а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно.
Интересно откуда взялся первый ItemChanged.
Поставьте breakpoint и посмотрите Call Stack.
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33926794
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрей _serjj_а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно.
Интересно откуда взялся первый ItemChanged.
Поставьте breakpoint и посмотрите Call Stack.
первый берется после того как вы провели изменение в поле и нажали кнопку. Поле теряет фокус и срабатывает ItemChanged для ДВ.
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33926871
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_serjj_ ЗоринАндрей _serjj_а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно.
Интересно откуда взялся первый ItemChanged.
Поставьте breakpoint и посмотрите Call Stack.
первый берется после того как вы провели изменение в поле и нажали кнопку. Поле теряет фокус и срабатывает ItemChanged для ДВ.
сорри, первый раз ItemChanged запускает AcceptText, второй раз срабатывает
ItemChanged сам
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33927111
ytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При нажатии на кнопку никакого вызова ItemChanged() не происходит, т.к. теряется не фокус поля, а фокус DataWindow.
В кнопке прописывается AcceptText для DataWindow именно для того, чтобы вызвать срабатывание ItemChanged() для того поля, которое не отработало.

Вызов, если я правильно понял, AcceptText из ItemChanged() надо убрать
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33927276
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33927725
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_serjj_
сорри, первый раз ItemChanged запускает AcceptText, второй раз срабатывает
ItemChanged сам
что значит "срабатывает сам" ?
вызвали AcceptText, сработал ItemChanged, выдал ошибку, AcceptText вернул -1, процесс сохранения прекращаем.
с чего он вдруг сам то сработал?
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33927772
ytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_serjjУкажите что с дизайном не так:
имеем n полей в датавинд. ItemChanged проверяет введенные данные посредством ф-ции из него запускаемой и ф-ция эта выдает сообщение что за поле и что туда надо бы ввести. Если провести некоторые изменения в поле и не выйти из него, то ДВ считает, что оно не изменилось. чтоб избежать необходимости щелкать табом, я перед сохранением запускаю AcceptText. Если поле было введено неправильно, но пользователь не щелкнул табом, а нажал кнопку сохранить, то ругается сначала ф-ция из ItemChanged , потом срабатывает AcceptText в скрипте на сохранение и триггерует ItemChanged и ф-ция с ругательствами срабатывает повторно.


Вам уже указывали, в чем Ваша проблема - то, что выделено Красненьким, не может быть.

Ищите ...
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33927982
_serjj_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрей _serjj_
сорри, первый раз ItemChanged запускает AcceptText, второй раз срабатывает
ItemChanged сам
что значит "срабатывает сам" ?
вызвали AcceptText, сработал ItemChanged, выдал ошибку, AcceptText вернул -1, процесс сохранения прекращаем.
с чего он вдруг сам то сработал?
ItemChanged не выдаёт ошибку, его единственное предназначение - возврат. что он возвращает зависит от ф-ции, которая в нем запускается. Эта ф-ция проверяет, удовлетворяет ли введеное значение условиям задачи.

срабатывеет сам - то есть автоматически, без моего вмешательства
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33929633
ytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_serjj_срабатывеет сам - то есть автоматически, без моего вмешательства
Да Вы сказочник, уважаемый. В тот ли форум Вы попали ?
А по серьезному - Вам уже советовали проверить дебаггером, чего там делается. Ежели для Вас и слово дебаггер ни о чем не говорит, ну ...
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33929654
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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!) ....
...
Рейтинг: 0 / 0
ItemChanged - AcceptText
    #33930685
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Напишите в DW на событии ItemChanged messagebox('', ''), поставьте на окно кнопку без кода.
2. Теперь сделайте изменение в DW и нажмите таб. Должен выскочить message.
3. Теперь сделайте изменение в DW и нажмите на кнопку. Ничего не должно произойти.
4. Теперь на кнопке напишите AcceptText. Сделайте изменения в DW и нажмите на кнопку. Должен выскочить message.
Так эта ерунда работает. Если нет, то надо искать ошибку в скрипте.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / ItemChanged - AcceptText
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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