![]() |
#1 |
Участник
|
Создание формы в рантайме: прикрепить кнопку с МЕТОДОМ clicked
Добрый день, товарищи!
Ситуация такая: я создаю в коде в режиме выполнения форму, которую потом запускаю. В процессе создания я добавляю контрол, скажем кнопку, у которой необходимо перекрыть метод обработчик события clicked. Напомню, что форма создается ДИНАМИЧЕСКИ Вопрос такой: как это сделать и возможно ли это в принципе? |
|
![]() |
#2 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
![]() |
#3 |
Участник
|
Товарищи, делюсь кодом:
(Предполагается, что есть class MethodsClass, где, согласно статье, есть метод void Button_clicked): X++: MethodsClass methods = new MethodsClass(); Form form1; FormRun frun; Args args; FormBuildDesign fbd; FormBuildControl fbc; FormBuildTabControl fbtc; FormBuildTabPageControl fbtpc; FormBuildGridControl fbgc; FormBuildDataSource fbds; FormBuildStringControl fbsc; FormBuildIntControl fbic; FormBuildButtonControl fbbc; FormBuildStringControl fbsc2; FormBuildStringControl fbsc3; ; //Создаем форму form1 = new Form(); //Потренеруемся заодно сменять датасорс fbds = form1.addDataSource(tablestr(Worker)); fbds.name(tablestr(TableA)); fbds.table(tablenum(TableA)); fbds.allowCreate(false); fbds.allowDelete(false); fbds.allowEdit(false); fbd = form1.addDesign("Design"); fbtc = fbd.addControl(FormControlType::Tab, "Tab"); fbtc.width(400); fbtpc = fbtc.addControl(FormControlType::TabPage, "TabPage"); fbtpc.caption("Caption"); fbgc = fbtpc.addControl(FormControlType::Grid, "Grid"); fbgc.allowEdit(true); fbgc.width(350); fbic = fbgc.addDataField(fbds.id(), fieldnum(TableA, ID)); fbic.label("Айди"); fbic.width(50); fbsc = fbgc.addDataField(fbds.id(), fieldnum(TableA, A_TEXT)); fbsc.label("Текст"); fbsc.width(250); //Добавка кнопки fbbc = fbtpc.addControl(FormControlType::Button, "Button"); fbbc.text("Текст кнопки"); fbbc.bold(7); fbbc.colorScheme(2); fbbc.backStyle(2); fbbc.backgroundColor(0x0000ff00); fbbc.foregroundColor(0x00ff0000); //Добавка поля датасорса fbsc2 = fbtpc.addControl(FormControlType::String, "StringEdit"); fbsc2.dataSource(fbds.id()); fbsc2.dataField(fieldnum(TableA, A_TEXT)); //Добавка текстового поля с перечислением fbsc3 = fbtpc.addControl(FormControlType::String, "StringEdit1"); fbsc3.extendedDataType(extendedTypeNum(ETD_String)); args = new Args(); args.name("Рантайм-форма!"); args.object(form1); frun = new FormRun(args); frun.init(); frun.run(); //Вот код прикрепления метода frun.controlMethodOverload(true); frun.controlMethodOverloadObject(methods); frun.wait(); |
|
![]() |
#4 |
Участник
|
Я думаю, что Вам поможет данный пример
C уважением, Дмитрий. |
|
![]() |
#5 |
Участник
|
В Ax2012 есть новый метод RegisterOverrideMethod, который может в каких-то случаях быть удобнее.
|
|