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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2008, 20:24   #1  
AndrianG is offline
AndrianG
Участник
 
43 / 19 (1) ++
Регистрация: 12.12.2008
Как програмно поймать клик на кнопке ?
Есть такой код 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);
 
 
}
Междк коментариев //------------------------------------------------------------------ есть код который якобы работает с formbuttoncontrol.clicked(); но не получаестя поймать этот клик ка быть ?
Старый 23.12.2008, 21:26   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Это что вообще было? Вам точно на этот форум?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 23.12.2008, 22:20   #3  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Это что вообще было? Вам точно на этот форум?
Судя по остальным постам Андриана - это по идее должно было быть опубликовано в ветке Dynamics Ax.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 24.12.2008, 07:59   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
перенес.
__________________
полезное на axForum, github, vk, coub.
Старый 24.12.2008, 09:11   #5  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Ничего не понял, но по-моему должно быть вот так
X++:
FormMethodHandler = formMethodHandler = new FormMethodHandler()
formRum.controlMethodOverload(true);
formRun.this.controlMethodOverloadObject(formMethodHandler)
Класс FormMethodHandler будет обрабатывать все события формы. Для этого в нем должны быть методы следующего вида
X++:
void MyButton_clicked()
{
}
где MyButton - имя контрола, а clicked - имя метода у этого контрола
Старый 24.12.2008, 10:07   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Объясните, зачем Вы создаете динамическую форму?

И копайте в сторону [Tutor]FormRunBase[Batch] - там есть пример, как берется стандартная форма и в нее "пихаются" дополнительные контролы. На стандартной форме можно у баттона перехватить клик. Да, писать код на контроле - плохо! В 4ке даже дебагер не работал.

С Уважением,
Георгий
Старый 24.12.2008, 10:15   #7  
AndrianG is offline
AndrianG
Участник
 
43 / 19 (1) ++
Регистрация: 12.12.2008

->Lucky13
Просто я хотел в run-time создать форму и несколько контролов а потом (в моем примере ) при клике на button что-то происходило ,к примеру, выскакивает сообщение !
Старый 24.12.2008, 10:19   #8  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от AndrianG Посмотреть сообщение


Просто я хотел в run-time создать форму и несколько контролов а потом (в моем примере ) при клике на button что-то происходило ,к примеру, выскакивает сообщение !
Тогда я все правильно понял, сделайте как я указал и все будет работать
Старый 24.12.2008, 10:23   #9  
AndrianG is offline
AndrianG
Участник
 
43 / 19 (1) ++
Регистрация: 12.12.2008
?
Цитата:
Сообщение от George Nordic Посмотреть сообщение
Объясните, зачем Вы создаете динамическую форму?

И копайте в сторону [Tutor]FormRunBase[Batch] - там есть пример, как берется стандартная форма и в нее "пихаются" дополнительные контролы. На стандартной форме можно у баттона перехватить клик. Да, писать код на контроле - плохо! В 4ке даже дебагер не работал.

С Уважением,
Георгий

А ты можеш простой пример показать , который работает !
Старый 24.12.2008, 10:40   #10  
AndrianG is offline
AndrianG
Участник
 
43 / 19 (1) ++
Регистрация: 12.12.2008
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Тогда я все правильно понял, сделайте как я указал и все будет работать
стандартно класс FormMethhodHandler нету, получается я его должен создать ?
Старый 24.12.2008, 10:43   #11  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от AndrianG Посмотреть сообщение
стандартно класс FormMethhodHandler нету, получается я его должен создать ?
Да, класс нужно создать, причем совершенно не важно как он будет называться. Важно как будут называться его методы. Например:
X++:
void MyButton_clicked()
{
}
Сработает при клике на кнопке с именем MyButton
Старый 24.12.2008, 10:53   #12  
AndrianG is offline
AndrianG
Участник
 
43 / 19 (1) ++
Регистрация: 12.12.2008
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Да, класс нужно создать, причем совершенно не важно как он будет называться. Важно как будут называться его методы. Например:
X++:
void MyButton_clicked()
{
}
Сработает при клике на кнопке с именем MyButton
Заработало !
Thank you !

А у меня такой еще вопрос ?
А можно и класс в run-time создать ?
Старый 24.12.2008, 11:01   #13  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от AndrianG Посмотреть сообщение
А у меня такой еще вопрос ?
А можно и класс в run-time создать ?
Да, можно.
Через класс ClassBuild например
__________________
Zhirenkov Vitaly
Старый 24.12.2008, 11:06   #14  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от ZVV Посмотреть сообщение
Да, можно.
Через класс ClassBuild например
Хотя стоп, я наверное неправильно понял вопрос. Имелось ввиду чтоб "совсем в рунтайме", без создания класса в АОТ?
Тогда не знаю, не уверен.

А вообще есть замечательная вещь Dialog (с Improvement).
Почему бы вам его не использовать, а не городить весь этот огород, который потом с огнём не разгребёшь и вообще явно всё это не БП.
__________________
Zhirenkov Vitaly
Старый 24.12.2008, 13:02   #15  
AndrianG is offline
AndrianG
Участник
 
43 / 19 (1) ++
Регистрация: 12.12.2008
Thumbs up
Цитата:
Сообщение от ZVV Посмотреть сообщение
Хотя стоп, я наверное неправильно понял вопрос. Имелось ввиду чтоб "совсем в рунтайме", без создания класса в АОТ?
Тогда не знаю, не уверен.

А вообще есть замечательная вещь Dialog (с Improvement).
Почему бы вам его не использовать, а не городить весь этот огород, который потом с огнём не разгребёшь и вообще явно всё это не БП.
Получилось проблема решена при помощи Dialog и
formbuildStaticTextControl;
formbuildStaticTextControl formbuildStaticTextControlBold;
formbuildwindowcontrol;
Спасибо за Совет !
Будет нужно попробую и с ClassBuild
Старый 24.12.2008, 13:23   #16  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Вот Вам еще для коллекции. Можно быстренько переделать джоб в минимально необходимый класс. Т.е. в этом классе должен быть статический метод main (чтобы можно было запускать класс "как джоб" из пунктов меню), а также некоторый основной исполнительный метод (пусть будет run), в который надо практически без изменений поместить код из джоба.

В качестве бонуса за такой переход от джоба к классу будет Вам счастье - Вы сможете код MyButton_clicked поместить в этот же самый класс. А чтобы оперативно менять логику в MyButton_clicked можно воспользоваться функцией runBuf, которой скармливать исполнимый код в зависимости от тех или иных обстоятельств.

Прикладываю демокласс проектом. Для запуска надо написать джоб с одной строчкой: ButtonClickedTestClass::main();

Но всё это всё равно не совсем верный путь, поэтому прислушайтесь к коллегам и по возможности старайтесь избегать подобных динамических наворотов
Вложения
Тип файла: xpo ButtonClickedTestClass.xpo (2.1 Кб, 436 просмотров)
За это сообщение автора поблагодарили: PMS (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поймать SQL запрос при формировании отчета Qaz Qwerty DAX: Программирование 7 12.06.2008 01:46
как программно поюзать все формы Daido DAX: Программирование 3 02.08.2007 13:39
Создание классов программно Beast-L DAX: Программирование 8 22.11.2006 13:40
Помогите поймать глюк :) db DAX: Программирование 3 02.03.2005 16:09
По нажатию на кнопке в Grid-е появляются... Yuri Safronov DAX: Программирование 3 06.09.2002 11:31

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

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

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