22.12.2010, 11:10 | #1 |
Участник
|
Доброго времени суток камрады. Я пока только познаю возможности Navision и вопрос у меня такой. Существует ли триггер или другая какая возможность обрабатывать событие ввода данных в TextBox. Т.е. мне нужно что-то делать прямо в процессе ввода данных в TextBox. Если быть точнее, мне нужно знать, ввели что-то в поле или нет и узнать это нужно до того, как пользователь покинет это поле. OnInputChange по своему названию вроде должен подойти, но нифига не подходит. Он срабатывает только после того, как пользователь покидает поле. Отсюда ещё один вопрос: для чего нужен триггер OnInputChange и чем он принципиально отличается от OnValidate?
P.S. Только не говорите пожалуйста, что это невозможно, я уже столько раз это слышал по другим вопросам в Navision... Спасибо за внимание. |
|
22.12.2010, 14:06 | #2 |
Участник
|
Триггер OnInputChange() срабатывает ВО ВРЕМЯ ввода данных,
т.е. вы вводите стринг из трёх букв "абв" == > этот триггер срабатывает 3 раза, т.е. ВО ВРЕМЯ ввода каждой буквы То, что Вам нужно, это триггер OnAfterInput(), он срабатывает ПОСЛЕ OnInputChange() и ещё ДО OnValidate() например в поле "Description": Код: Description - OnAfterInput(VAR Text : Text[1024];) IF Text <> '' THEN BEGIN // ваш программный код ...... ...... END; Чтобы узнать, в каком порядке отрабытавают триггеры, пропишите просто CONFIRM-Диалог в каждом триггере (в форме и в таблице), в C/AL HELP'e тоже кое-что нaписано. |
|
23.12.2010, 14:20 | #3 |
Участник
|
Цитата:
Сообщение от AlexB
Триггер OnInputChange() срабатывает ВО ВРЕМЯ ввода данных,
т.е. вы вводите стринг из трёх букв "абв" == > этот триггер срабатывает 3 раза, т.е. ВО ВРЕМЯ ввода каждой буквы То, что Вам нужно, это триггер OnAfterInput(), он срабатывает ПОСЛЕ OnInputChange() и ещё ДО OnValidate() например в поле "Description": Код: Description - OnAfterInput(VAR Text : Text[1024];) IF Text <> '' THEN BEGIN // ваш программный код ...... ...... END; Чтобы узнать, в каком порядке отрабытавают триггеры, пропишите просто CONFIRM-Диалог в каждом триггере (в форме и в таблице), в C/AL HELP'e тоже кое-что нaписано. Спасибо большое! Когда переходишь с других платформ, тяжелее всего не к синтаксису привыкнуть, не к языку, тяжелее всего проникнуться другой логикой и начать думать в рамках этой новой логики. Ведь по сути элементарный вопрос, мог бы и сам догадаться, но я даже Ваше объяснение не сразу понял... Ещё раз спасибо большое! |
|
26.12.2010, 22:28 | #4 |
Участник
|
Цитата:
Сообщение от Predatore
Возможно я не уловил сути триггера OnInputChange, т.к. я пытался в нём делать проверку, есть ли текст в поле TextBox'a, а он там видимо появляется только после валидейта, я правильно понял? А в OnAfterInput в переменной Text как раз таки и идёт поток именно вводимой информации. Т.е. если я введу стринг 'абв', то этот триггер тоже сработает 3 раза, а переменная Text будет меняться следующим образом, сначала Text='а', потом Text='аб' и в конце Text='абв', я всё правильно понял?
OnAferInput() срабатывает только один раз, a именно после того как вы сделали изменения в TextBoxe и ПОКИНУЛИ поле (посредством ENTER или TAB) т.е. закончили ввод данных, и переменная TEXT содержит ВСЁ содержимое (извините за тавтологию) поля. Этот триггер срабатывает также без всяких изменений, т.е. при F2-Validate (т.е. щёлкаете в поле, нажимаете 2 раза F2 и ENTER, тем самым валидируете поле, не произведя в нём никаких изменений). Последовательность срабатывания некоторых триггеров в (форме и таблице) при вводе данных в текстбоксе в форме: 1. OnInputChange() в текстбоксе на форме 2. OnAfterInput() в текстбоксе на форме 3. OnValidate() поля в таблице 4. ОnValidate поля в текстбоксе на форме 5. ОnAfterValidate поля в текстбоксе на форме ==> внимание: ERROR в этом триггере закрывает форму, что не всегда красиво |
|