23.12.2008, 20:24 | #1 |
Участник
|
Как програмно поймать клик на кнопке ?
Есть такой код Job :
X++: static void ag_createFormControl(Args _args) { Args args; Form form; FormRun formRun; FormBuildDesign formBuildDesign; FormBuildDataSource formBuildDataSource; FormBuildGridControl formBuildGridControl; FormBuildStringControl formBuildStringControl; FormStringControl formStringControl; FormGridControl formGridControl; formBuildCommandButtonControl formBuildCommandButtonControl; formButtoncontrol formbuttoncontrol; DictTable dictTable; int idx; int idx2; int idx3; ; // Create the form header. form = new Form(); // Add data sources to the form. dictTable = new DictTable(tablenum(CustTable)); formBuildDataSource = form.addDataSource(dictTable.name()); formBuildDataSource.table(dictTable.id()); // Create the form design. formBuildDesign = form.addDesign("Design"); // Add controls. formBuildGridControl = formBuildDesign.addControl(FormControlType::Grid, "Table Grid"); formBuildGridControl.dataSource(dictTable.name()); idx = formBuildGridControl.id(); formBuildStringControl = formBuildDesign.addControl(FormControlType::String, "Table String"); formBuildStringControl.dataSource(dictTable.name()); idx2 = formBuildStringControl.id(); formbuildcommandbuttoncontrol=formbuilddesign.addControl(formcontroltype::CommandButton,"OK"); formbuildcommandbuttoncontrol.text('&OK'); idx3=formbuildcommandbuttoncontrol.id(); // Add data fields to the controls. formBuildGridControl.addDataField(formBuildDataSource.id(), dictTable.fieldName2Id("AccountNum")); formBuildGridControl.addDataField(formBuildDataSource.id(), dictTable.fieldName2Id("Phone")); formBuildStringControl.dataSource(formBuildDataSource.id()); formBuildStringControl.dataField(1); args = new Args(); args.object(form); // Create the run-time form. formRun = new FormRun(args); formRun.run(); //------------------------------------------------------------------- // formrun.controlMethodOverloadObject(formbuttoncontrol); // formbuttoncontrol=new formbuttoncontrol(); // formbuttoncontrol=formrun.controlMethodOverloadObject(formbuttoncontrol); // formbuttoncontrol=formrun.controlCallingMethod(); formButtonControl = formRun.control(idx3); formbuttoncontrol.clicked(); //------------------------------------------------------------------ formRun.detach(); // Select the grid control. formGridControl = formRun.control(idx); formGridControl = formRun.selectTarget(formGridControl); formGridControl.showColLabels(false); } |
|
23.12.2008, 21:26 | #2 |
Moderator
|
Это что вообще было? Вам точно на этот форум?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
23.12.2008, 22:20 | #3 |
Чайный пьяница
|
Судя по остальным постам Андриана - это по идее должно было быть опубликовано в ветке Dynamics Ax.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
24.12.2008, 07:59 | #4 |
Участник
|
перенес.
|
|
24.12.2008, 09:11 | #5 |
Участник
|
Ничего не понял, но по-моему должно быть вот так
X++: FormMethodHandler = formMethodHandler = new FormMethodHandler() formRum.controlMethodOverload(true); formRun.this.controlMethodOverloadObject(formMethodHandler) X++: void MyButton_clicked()
{
} |
|
24.12.2008, 10:07 | #6 |
Модератор
|
Объясните, зачем Вы создаете динамическую форму?
И копайте в сторону [Tutor]FormRunBase[Batch] - там есть пример, как берется стандартная форма и в нее "пихаются" дополнительные контролы. На стандартной форме можно у баттона перехватить клик. Да, писать код на контроле - плохо! В 4ке даже дебагер не работал. С Уважением, Георгий |
|
24.12.2008, 10:15 | #7 |
Участник
|
->Lucky13 Просто я хотел в run-time создать форму и несколько контролов а потом (в моем примере ) при клике на button что-то происходило ,к примеру, выскакивает сообщение ! |
|
24.12.2008, 10:19 | #8 |
Участник
|
|
|
24.12.2008, 10:23 | #9 |
Участник
|
Цитата:
Сообщение от George Nordic
Объясните, зачем Вы создаете динамическую форму?
И копайте в сторону [Tutor]FormRunBase[Batch] - там есть пример, как берется стандартная форма и в нее "пихаются" дополнительные контролы. На стандартной форме можно у баттона перехватить клик. Да, писать код на контроле - плохо! В 4ке даже дебагер не работал. С Уважением, Георгий А ты можеш простой пример показать , который работает ! |
|
24.12.2008, 10:40 | #10 |
Участник
|
|
|
24.12.2008, 10:43 | #11 |
Участник
|
Цитата:
X++: void MyButton_clicked()
{
} |
|
24.12.2008, 10:53 | #12 |
Участник
|
Цитата:
Thank you ! А у меня такой еще вопрос ? А можно и класс в run-time создать ? |
|
24.12.2008, 11:01 | #13 |
MCITP
|
Да, можно.
Через класс ClassBuild например
__________________
Zhirenkov Vitaly |
|
24.12.2008, 11:06 | #14 |
MCITP
|
Хотя стоп, я наверное неправильно понял вопрос. Имелось ввиду чтоб "совсем в рунтайме", без создания класса в АОТ?
Тогда не знаю, не уверен. А вообще есть замечательная вещь Dialog (с Improvement). Почему бы вам его не использовать, а не городить весь этот огород, который потом с огнём не разгребёшь и вообще явно всё это не БП.
__________________
Zhirenkov Vitaly |
|
24.12.2008, 13:02 | #15 |
Участник
|
Цитата:
Сообщение от ZVV
Хотя стоп, я наверное неправильно понял вопрос. Имелось ввиду чтоб "совсем в рунтайме", без создания класса в АОТ?
Тогда не знаю, не уверен. А вообще есть замечательная вещь Dialog (с Improvement). Почему бы вам его не использовать, а не городить весь этот огород, который потом с огнём не разгребёшь и вообще явно всё это не БП. formbuildStaticTextControl; formbuildStaticTextControl formbuildStaticTextControlBold; formbuildwindowcontrol; Спасибо за Совет ! Будет нужно попробую и с ClassBuild |
|
24.12.2008, 13:23 | #16 |
Moderator
|
Вот Вам еще для коллекции. Можно быстренько переделать джоб в минимально необходимый класс. Т.е. в этом классе должен быть статический метод main (чтобы можно было запускать класс "как джоб" из пунктов меню), а также некоторый основной исполнительный метод (пусть будет run), в который надо практически без изменений поместить код из джоба.
В качестве бонуса за такой переход от джоба к классу будет Вам счастье - Вы сможете код MyButton_clicked поместить в этот же самый класс. А чтобы оперативно менять логику в MyButton_clicked можно воспользоваться функцией runBuf, которой скармливать исполнимый код в зависимости от тех или иных обстоятельств. Прикладываю демокласс проектом. Для запуска надо написать джоб с одной строчкой: ButtonClickedTestClass::main(); Но всё это всё равно не совсем верный путь, поэтому прислушайтесь к коллегам и по возможности старайтесь избегать подобных динамических наворотов |
|
|
За это сообщение автора поблагодарили: PMS (1). |