powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / проверка введеного значения не работает
13 сообщений из 13, страница 1 из 1
проверка введеного значения не работает
    #32537514
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PB 8
В dw на событии ItemChanged висит проверка введеного значения. Если значение не удовлетворительное - событие возвращает 1 (то есть выдать сообщение об ошибке и оставить фокус в поле). Что имеем:
Пользователь ввел плохое значение и ткнул кнопку на тулбаре - кнопка не сработала, зато появилось сообщение об ошибке. Пользователь ткнул Ok в этом окошке и снова нажал кнопку на тулбаре. В этот раз кнопка тулбара заработала, никакого сообщения об ошибке не выдалось. Спрашивается почему?
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32537518
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ээ..., а что на кнопке ОК написано?
А что на событии ItemChanged кроме возвращает 1 для этой колонки написано?
А написано ли чтонить в ItemError?
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32537595
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На кнопке Ok написано Ok :) Это имелось в виду окошко сообщающее об ошибке, ну "значение XYZ не коррректно, указывайте значение межуд N и M",

ItemChanged никаких изменений в dw не делает, только проверка введеного значения. И возвращает 0 или 1. Галочка на Extend Ancestor Script снята.

ItemError - стандартный из PFC.

В общем, событие ItemChanged срабатывает только один раз. Оно отрабатывает на уход фокуса из ячейки если ячейчка редактировалась. А после того как один раз в перемещении фокуса было отказано, а сразу после этого не редактируя опять попытались переместить фокус - уже не срабатывает. Причем это только в случае если фокус переносится не в соседнюю ячейку того-же DW а во вне окна содержащего DW. Если в соседнюю ячейку - то все правильно работает.
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32537606
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда всё работает, как и должно.
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32537677
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения PB это может так и должно. А со всех остальных точек зрения так быть не должно.
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32537795
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcceptText() в соответствующих местах обычно помогает...
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32539355
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп, я тебе буду очень благодарен, если ты мне скажешь в какие именно места поставить AcceptText() в данной ситуации? Я тебе даже пиво поставлю :)
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32539408
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PB все делает правильно. Потеря фокуса DW не означает автоматическое сохранение редактируемого значения. И это правильно и здорово. Иначе представьте себе ситуацию, что нужно на кнопку Cancel откатить изменения, а перед этим DW ругнулось бы на неправильное значение только из за того, что фокус перешел на кнопку. Раз кнопка на Toolbar чего то делает и ей важно, чтобы в DW попали изменения, то в ее коде и нужно вызывать AcceptText(). далее если он не прошел, то можно просто обратно вызвать у DW метод SetFocus().

Так что Филипп на все 100% прав
авторAcceptText() в соответствующих местах обычно помогает...
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32539449
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кнопка тулбара так и делает. В ней стоит AcceptText для текущего DW самого верхнего окна. Если AcceptText не прошел, там делается SetFocus обратно на окно. Все это и так есть!

Еще раз повторяю: После первого "AcceptText() не прошел", данная кнопка тулбара нажимается повторно, без попытки сделать исправления в DW. Повторный AcceptText проходит всегда! Он просто не вызвает ItemChanged и не делает вообще никаких проверок.
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32539521
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм. Тогда тут может быть подозрение на ItemError. Ради интереса сделайте следующие действия:
1. Ввести неправильное значение
2. Нажать кнопку, а значит вызвать AcceptText(), посмотреть на сообщение об ошибке и вернуться в DW
3. Попытаться перейти на следующее поле, нажав Tab.
Вполне возможен вариант, что пункт 3 сработает, фокус переместится на другое поле, а в предыдущем возвратиться оригинальное значение.

У меня смоделировать Вашу ситуацию не получилось - на DW я навесил на ItemChanged проверку с RETURN 1 на заданное условие и кнопку на форму, которая вызывает AcceptText(). Работает как часы (PB 9.0.1.7171).
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32543697
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS Гм. Тогда тут может быть подозрение на ItemError. Ради интереса сделайте следующие действия:
1. Ввести неправильное значение
2. Нажать кнопку, а значит вызвать AcceptText(), посмотреть на сообщение об ошибке и вернуться в DW
3. Попытаться перейти на следующее поле, нажав Tab.
Вполне возможен вариант, что пункт 3 сработает, фокус переместится на другое поле, а в предыдущем возвратиться оригинальное значение.
А тогда мы получем как и пологается второе ругательно окошко о недопустимости введенного значения. Вот только какой нормальный пользователь будет нажимать таб если есть мышка? :)


ASCRUS У меня смоделировать Вашу ситуацию не получилось - на DW я навесил на ItemChanged проверку с RETURN 1 на заданное условие и кнопку на форму, которая вызывает AcceptText(). Работает как часы (PB 9.0.1.7171).
Ну у меня восьмерка и переход пока только в очень отдаленном будущем....
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32543731
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я и в РВ8 не могу смоделировать...
...
Рейтинг: 0 / 0
проверка введеного значения не работает
    #32545324
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура, победил. Оказывается, если на той самой кнопке тулбара висит код типа:

if w.dw.AcceptText() = -1 then
w.dw.SetFocus()
return
end if

то получаем вышеописаное. То есть в случае если окно с dw уже однажды теряло фокус и после этого не было произведено повторное редактирование поля - AcceptText() вернет 1 всегда. А вот если мы изменим вышеприведенный код на:

w.dw.SetFocus()
if w.dw.AcceptText() = -1 then
return
end if
this.SetFocus()

то в итоге все работает.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / проверка введеного значения не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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