|
![]() |
#1 |
Ищущий знания...
|
вот, нашел в своем загашнике знаний
![]() Как динамически изменять активность поля диалога: Если перекрыть в вашем классе метод void dialogSelectCtrl() и произвести вызов метода dialog.allowUpdateOnSelectCtrl(true); в перекрытом методе dialog(), то ваш перекрытый метод dialogSelectCtrl() будет вызываться каждый раз при получении фокуса элементом ввода. Вконце метода dialog() добавляете следующий код: X++: { ... dialog.allowUpdateOnSelectCtrl(true); this.dialogSelectCtrl(); return dialog; } X++: public void dialogSelectCtrl() { super(); flag = dlgControlFlag.value(); if(flag) dlgControlField.active(false); else dlgControlField.active(true); }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#2 |
Moderator
|
офф-совет
Цитата:
Сообщение от Poleax
![]() ![]() ![]() Можно примерно так, как я пробую в этом сообщении: Gustav: Unsorted, или Записки DAX-дилетанта - II |
|
|
За это сообщение автора поблагодарили: Lemming (4). |
![]() |
#3 |
Модератор
|
Цитата:
Сообщение от lev
![]() вот, нашел в своем загашнике знаний
![]() Как динамически изменять активность поля диалога: Если перекрыть в вашем классе метод void dialogSelectCtrl() и произвести вызов метода dialog.allowUpdateOnSelectCtrl(true); в перекрытом методе dialog(), то ваш перекрытый метод dialogSelectCtrl() будет вызываться каждый раз при получении фокуса элементом ввода. ... ![]() добавил методы модификации на поля: X++: void dateField_modified() { ; info('dateField_modified'); breakpoint; } void numberField_modified() { ; info('numberField_modified'); breakpoint; } X++: protected boolean prompt() { Dialog dlg; ; dlg = this.dialog(); // dlg.run(); dlg.doRun(); this.dialogPostRun(dlg); dlg.wait(); if (dlg.closedOk()) return this.getFromDialog(); return false; } public void dialogPostRun(Dialog _dialog) { ; _dialog.dialogForm().formRun().controlMethodOverload(true); _dialog.dialogForm().formRun().controlMethodOverloadObject(this); } РЕАКЦИИ НИ КАКОЙ ![]() метод dialogSelectCtrl() бесполезен, так как он отрабатывает только один раз при открытии диалогового окна. При изменении значения в поле, метод dialogSelectCtrl() даже не реагирует. Как заставить видить _modified ? Надо учесть что Classes\RAssetReport ни от кого не наследован. Последний раз редактировалось Poleax; 15.10.2009 в 17:11. |
|
![]() |
#4 |
Moderator
|
Цитата:
X++: public boolean OKOFCode_modified() { boolean ret; FormStringControl me = dialog.formRun().controlCallingMethod(); ; ret = me.modified(); // как super() // далее наш функционал, который должен отрабатывать на modified return ret; } |
|
|
За это сообщение автора поблагодарили: Poleax (1). |
![]() |
#5 |
Участник
|
Цитата:
Сообщение от Poleax
![]() ![]() добавил методы модификации на поля: X++: void dateField_modified() { ; info('dateField_modified'); breakpoint; } void numberField_modified() { ; info('numberField_modified'); breakpoint; } А вы уверены, что созданные контролы на диалоге имеют имена "dateField" и "numberField" ? В стандарте они создаются как "Fld1_1" и "Fld2_1". Соответственно, методы должны называться fld1_1_modified() и fld2_1_modified(). |
|
![]() |
#6 |
Модератор
|
Цитата:
X++: DialogField dateField; DialogField numberField; |
|
|
За это сообщение автора поблагодарили: Lemming (-2). |
![]() |
#7 |
Участник
|
Цитата:
dateField и numberField - названия переменных, а названия контролов совсем другие. Посмотрите также методы dialog.addField() и dialogField.fieldName() - все станет ясно... |
|
|
За это сообщение автора поблагодарили: Lemming (4), Poleax (2). |
![]() |
#8 |
Модератор
|
Цитата:
![]() ![]() |
|
![]() |
#9 |
Moderator
|
Цитата:
Цитата:
Сообщение от Gustav
![]() Можно перейти от fld5_1 к "нормальному" названию поля типа "Kontragent", создав переменную контрола соответствующего типа, и тогда метод приобретет более осмысленное название типа Kontragent_modified(). Соответственно, никаких проблем с последующим добавлением полей в серединку не возникнет. Делал такое в Ax 3.0 sp4.
X++: static void Job220(Args _args) { Dialog dialog = new Dialog('Наш диалог'); FormStringControl fscOKOFCode; FormIntControl ficLifeTime; DialogField fieldOKOFCode; DialogField fieldLifeTime; ; fieldOKOFCode = dialog.addField(Types::String,'ОКОФ'); fieldLifeTime = dialog.addField(Types::Integer, 'Срок амортизации'); fscOKOFCode = fieldOKOFCode.fieldControl(); ficLifeTime = fieldLifeTime.fieldControl(); fscOKOFCode.name('OKOFCode'); ficLifeTime.name('LifeTime'); dialog.doInit(); dialog.formRun().controlMethodOverload( true ); dialog.formRun().controlMethodOverloadObject( new KKu_TestForPoleax( dialog )); // KKu_TestForPoleax - класс, содержащий метод OKOFCode_modified dialog.run(); // опытным путём было установлено, что здесь еще раз необходима инициализация переменных, // чтобы дальше ими свободно оперировать fscOKOFCode = dialog.formRun().design().controlName('OKOFCode'); ficLifeTime = dialog.formRun().design().controlName('LifeTime'); if(dialog.closedOk()) { box::info(strFmt('ОКОФ: %1, Срок: %2', fscOKOFCode.text(), ficLifeTime.value())); } } X++: class KKu_TestForPoleax { Dialog dialog; } void new(Dialog _dialog) { ; dialog = _dialog; } public boolean OKOFCode_modified() { boolean ret; FormStringControl me = dialog.formRun().controlCallingMethod(); ; ret = me.modified(); // как super() box::info('Привет, Poleax! Вон оно, оказывается, как надо было!'); return ret; } Последний раз редактировалось Gustav; 15.10.2009 в 18:43. |
|
|
За это сообщение автора поблагодарили: Poleax (4). |
![]() |
#10 |
Moderator
|
Всё! ПолучИте законченный пример - джоб и класс к нему (см. выше).
|
|
Теги |
dialog, modified, runbase |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|