AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.12.2010, 11:10   #1  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Доброго времени суток камрады. Я пока только познаю возможности Navision и вопрос у меня такой. Существует ли триггер или другая какая возможность обрабатывать событие ввода данных в TextBox. Т.е. мне нужно что-то делать прямо в процессе ввода данных в TextBox. Если быть точнее, мне нужно знать, ввели что-то в поле или нет и узнать это нужно до того, как пользователь покинет это поле. OnInputChange по своему названию вроде должен подойти, но нифига не подходит. Он срабатывает только после того, как пользователь покидает поле. Отсюда ещё один вопрос: для чего нужен триггер OnInputChange и чем он принципиально отличается от OnValidate?
P.S. Только не говорите пожалуйста, что это невозможно, я уже столько раз это слышал по другим вопросам в Navision...
Спасибо за внимание.
Старый 22.12.2010, 14:06   #2  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Триггер OnInputChange() срабатывает ВО ВРЕМЯ ввода данных,
т.е. вы вводите стринг из трёх букв "абв" == > этот триггер срабатывает 3 раза, т.е. ВО ВРЕМЯ ввода каждой буквы

То, что Вам нужно, это триггер OnAfterInput(), он срабатывает ПОСЛЕ OnInputChange() и ещё ДО OnValidate()

например в поле "Description":

Код:
Description - OnAfterInput(VAR Text : Text[1024];)

IF Text <> '' THEN BEGIN
  
  // ваш программный код
  ......
  ......

END;
Причём надо работать в этом триггере с VAR-variable Text!

Чтобы узнать, в каком порядке отрабытавают триггеры, пропишите просто CONFIRM-Диалог в каждом триггере (в форме и в таблице), в C/AL HELP'e тоже кое-что нaписано.
Старый 23.12.2010, 14:20   #3  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от AlexB Посмотреть сообщение
Триггер OnInputChange() срабатывает ВО ВРЕМЯ ввода данных,
т.е. вы вводите стринг из трёх букв "абв" == > этот триггер срабатывает 3 раза, т.е. ВО ВРЕМЯ ввода каждой буквы

То, что Вам нужно, это триггер OnAfterInput(), он срабатывает ПОСЛЕ OnInputChange() и ещё ДО OnValidate()

например в поле "Description":

Код:
Description - OnAfterInput(VAR Text : Text[1024];)

IF Text <> '' THEN BEGIN
  
  // ваш программный код
  ......
  ......

END;
Причём надо работать в этом триггере с VAR-variable Text!

Чтобы узнать, в каком порядке отрабытавают триггеры, пропишите просто CONFIRM-Диалог в каждом триггере (в форме и в таблице), в C/AL HELP'e тоже кое-что нaписано.
Возможно я не уловил сути триггера OnInputChange, т.к. я пытался в нём делать проверку, есть ли текст в поле TextBox'a, а он там видимо появляется только после валидейта, я правильно понял? А в OnAfterInput в переменной Text как раз таки и идёт поток именно вводимой информации. Т.е. если я введу стринг 'абв', то этот триггер тоже сработает 3 раза, а переменная Text будет меняться следующим образом, сначала Text='а', потом Text='аб' и в конце Text='абв', я всё правильно понял?
Спасибо большое! Когда переходишь с других платформ, тяжелее всего не к синтаксису привыкнуть, не к языку, тяжелее всего проникнуться другой логикой и начать думать в рамках этой новой логики. Ведь по сути элементарный вопрос, мог бы и сам догадаться, но я даже Ваше объяснение не сразу понял... Ещё раз спасибо большое!
Старый 26.12.2010, 22:28   #4  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от 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 в этом триггере закрывает форму, что не всегда красиво
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:00.