powerbuilder: событие itemchanged не запускается при смене фокуса

У меня есть главное окно. В окне сведений, когда я изменяю поле и нажимаю на главное окно, фокус изменяется, но событие itemchanged окна данных сведений не запускается. Теперь я хочу запускать событие itemchanged, когда фокус переключается с одного окна данных на другое окно данных.

P.S. Событие itemchanged срабатывает только в том случае, если я изменяю поле и нажимаю вкладку или если я изменяю поле и щелкаю внутри другого поля того же окна данных.


person MD Sayem Ahmed    schedule 19.08.2010    source источник
comment
Если элемент не изменился, почему вы хотите, чтобы itemchanged срабатывал? Если вам нужны события смены фокуса, захватите их.   -  person tpdi    schedule 19.08.2010


Ответы (2)


В событии LoseFocus окна данных подробностей вызовите AcceptText() в окне данных подробностей.

person Calvin Allen    schedule 19.08.2010
comment
Не могли бы вы немного объяснить, что здесь только что произошло? - person MD Sayem Ahmed; 19.08.2010
comment
Гримаса. Анализ проблемы правильный, но проверка данных срабатывает время от времени, например, когда пользователь пытается нажать кнопку «Отмена». Я знаю, что это популярный и простой метод, но для меня он дает слишком много негативных побочных эффектов. Я бы поместил AcceptText() там, где и когда это имеет смысл, например, кнопка «ОК», GetFocus на мастере, когда последний элемент с фокусом был подробным, и т. д.. Ваше приложение выдает сообщения об ошибках только тогда, когда вы переключаете приложения. проверить свою электронную почту (еще один раз, когда ваш DW потеряет фокус), и ваши пользователи будут говорить людям, что PowerBuilder — отстой. <очень прошу> - person Terry; 21.08.2010

Если пользователь вводит данные и не нажимает вкладку, фокус не меняется. И itemchanged не срабатывает до тех пор, пока значение не будет изменено (и не пройдет проверку).

Что на самом деле происходит здесь (если я правильно помню), так это то, что PowerBuilder помещает поле редактирования поверх фактического окна данных; окно данных никогда не увидит новое значение до тех пор, пока PB не получит значение из поля редактирования.

Вам нужно зафиксировать изменение фокуса (я думаю, onblur?) или, если это недостаточно детализировано, сообщения keyup.

person tpdi    schedule 19.08.2010
comment
Я считаю, что это на самом деле «Потерять фокус», а затем оттуда вызвать изменение элемента. - person Calvin Allen; 19.08.2010
comment
Как я могу вызвать изменение предмета из-за потери фокуса? Я уже пробовал. Я могу получить текущую строку, но как мне получить управление текущим столбцом? Кроме того, мне нужно передать новые данные в качестве аргумента для события itemchanged, как мне это получить? Если я смогу получить доступ к этим данным, моя проблема будет решена в первую очередь. - person MD Sayem Ahmed; 19.08.2010
comment
Спасибо за ваше объяснение .. +1 - person MD Sayem Ahmed; 19.08.2010