|
|
|
|
#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
тема закрыта. Нашел решение вопроса в Похожие темы метод Modified к stringControl Пора вам активировать свой блог (http://www.axforum.info/forums/blog.php?u=4016) и создать там хотя бы одно сообщение и записывать туда узелки на память с краткими комментариями. Можно примерно так, как я пробую в этом сообщении: Gustav: Unsorted, или Записки DAX-дилетанта - II |
|
|
|
| За это сообщение автора поблагодарили: Lemming (4). | |
|
|
#3 |
|
Модератор
|
Цитата:
Сообщение от lev
вот, нашел в своем загашнике знаний
![]() Как динамически изменять активность поля диалога: Если перекрыть в вашем классе метод void dialogSelectCtrl() и произвести вызов метода dialog.allowUpdateOnSelectCtrl(true); в перекрытом методе dialog(), то ваш перекрытый метод dialogSelectCtrl() будет вызываться каждый раз при получении фокуса элементом ввода. ... \Classes\RAssetReport добавил методы модификации на поля: 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); } РЕАКЦИИ НИ КАКОЙ Не видит методы _modifiedметод 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
\Classes\RAssetReport добавил методы модификации на поля: 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
|
Всё! ПолучИте законченный пример - джоб и класс к нему (см. выше).
|
|
|