|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
PB 8 В dw на событии ItemChanged висит проверка введеного значения. Если значение не удовлетворительное - событие возвращает 1 (то есть выдать сообщение об ошибке и оставить фокус в поле). Что имеем: Пользователь ввел плохое значение и ткнул кнопку на тулбаре - кнопка не сработала, зато появилось сообщение об ошибке. Пользователь ткнул Ok в этом окошке и снова нажал кнопку на тулбаре. В этот раз кнопка тулбара заработала, никакого сообщения об ошибке не выдалось. Спрашивается почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2004, 18:59 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
Ээ..., а что на кнопке ОК написано? А что на событии ItemChanged кроме возвращает 1 для этой колонки написано? А написано ли чтонить в ItemError? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2004, 19:05 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
На кнопке Ok написано Ok :) Это имелось в виду окошко сообщающее об ошибке, ну "значение XYZ не коррректно, указывайте значение межуд N и M", ItemChanged никаких изменений в dw не делает, только проверка введеного значения. И возвращает 0 или 1. Галочка на Extend Ancestor Script снята. ItemError - стандартный из PFC. В общем, событие ItemChanged срабатывает только один раз. Оно отрабатывает на уход фокуса из ячейки если ячейчка редактировалась. А после того как один раз в перемещении фокуса было отказано, а сразу после этого не редактируя опять попытались переместить фокус - уже не срабатывает. Причем это только в случае если фокус переносится не в соседнюю ячейку того-же DW а во вне окна содержащего DW. Если в соседнюю ячейку - то все правильно работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2004, 21:17 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
Тогда всё работает, как и должно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2004, 21:51 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
С точки зрения PB это может так и должно. А со всех остальных точек зрения так быть не должно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2004, 23:25 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
AcceptText() в соответствующих местах обычно помогает... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2004, 03:01 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
Филипп, я тебе буду очень благодарен, если ты мне скажешь в какие именно места поставить AcceptText() в данной ситуации? Я тебе даже пиво поставлю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2004, 17:02 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
PB все делает правильно. Потеря фокуса DW не означает автоматическое сохранение редактируемого значения. И это правильно и здорово. Иначе представьте себе ситуацию, что нужно на кнопку Cancel откатить изменения, а перед этим DW ругнулось бы на неправильное значение только из за того, что фокус перешел на кнопку. Раз кнопка на Toolbar чего то делает и ей важно, чтобы в DW попали изменения, то в ее коде и нужно вызывать AcceptText(). далее если он не прошел, то можно просто обратно вызвать у DW метод SetFocus(). Так что Филипп на все 100% прав авторAcceptText() в соответствующих местах обычно помогает... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2004, 17:28 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
Кнопка тулбара так и делает. В ней стоит AcceptText для текущего DW самого верхнего окна. Если AcceptText не прошел, там делается SetFocus обратно на окно. Все это и так есть! Еще раз повторяю: После первого "AcceptText() не прошел", данная кнопка тулбара нажимается повторно, без попытки сделать исправления в DW. Повторный AcceptText проходит всегда! Он просто не вызвает ItemChanged и не делает вообще никаких проверок. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2004, 17:59 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
Гм. Тогда тут может быть подозрение на ItemError. Ради интереса сделайте следующие действия: 1. Ввести неправильное значение 2. Нажать кнопку, а значит вызвать AcceptText(), посмотреть на сообщение об ошибке и вернуться в DW 3. Попытаться перейти на следующее поле, нажав Tab. Вполне возможен вариант, что пункт 3 сработает, фокус переместится на другое поле, а в предыдущем возвратиться оригинальное значение. У меня смоделировать Вашу ситуацию не получилось - на DW я навесил на ItemChanged проверку с RETURN 1 на заданное условие и кнопку на форму, которая вызывает AcceptText(). Работает как часы (PB 9.0.1.7171). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2004, 18:55 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
ASCRUS Гм. Тогда тут может быть подозрение на ItemError. Ради интереса сделайте следующие действия: 1. Ввести неправильное значение 2. Нажать кнопку, а значит вызвать AcceptText(), посмотреть на сообщение об ошибке и вернуться в DW 3. Попытаться перейти на следующее поле, нажав Tab. Вполне возможен вариант, что пункт 3 сработает, фокус переместится на другое поле, а в предыдущем возвратиться оригинальное значение. А тогда мы получем как и пологается второе ругательно окошко о недопустимости введенного значения. Вот только какой нормальный пользователь будет нажимать таб если есть мышка? :) ASCRUS У меня смоделировать Вашу ситуацию не получилось - на DW я навесил на ItemChanged проверку с RETURN 1 на заданное условие и кнопку на форму, которая вызывает AcceptText(). Работает как часы (PB 9.0.1.7171). Ну у меня восьмерка и переход пока только в очень отдаленном будущем.... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2004, 22:55 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
Да я и в РВ8 не могу смоделировать... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2004, 23:54 |
|
проверка введеного значения не работает
|
|||
---|---|---|---|
#18+
Ура, победил. Оказывается, если на той самой кнопке тулбара висит код типа: 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() то в итоге все работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2004, 17:57 |
|
|
start [/forum/topic.php?fid=15&gotonew=1&tid=1339113]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 249ms |
total: | 530ms |
0 / 0 |