21.03.2022, 20:42 | #1 |
Участник
|
D365 FormTreeControl + ContextMenu
Привет.
До обновления в D365 успешно жил класс PopupMenu, который работал с FormTreeControl. Класс меню заменили на ContextMenu ... Имеется код, который создает контекстное меню для FormTreeControl, как теперь его заменить на ContextMenu ? FormTreeControl не реализует методы getContextMenuOptions и selectedMenuOption |
|
21.03.2022, 21:16 | #2 |
Administrator
|
__________________
Возможно сделать все. Вопрос времени |
|
21.03.2022, 21:58 | #3 |
Участник
|
На форме да, а как это сделать из кода ?
В классе FormTreeControl нет таких методов |
|
21.03.2022, 22:40 | #4 |
Administrator
|
В классе PrintMgmtSetupUICtrlTree (который занимается рисованием дерева в форме управления печатью) есть взаимодействие между элементами дерева и классом ContextMenu.
Но там по сути (как я понял) каждый раз (видимо при раскрытии узла дерева) создается объект ContextMenu. Мне кажется - этот пример - та альтернатива, которую нужно взять за основу для реализации контекстного меню для дерева. у Вас задача такая же, как в этом примере?
__________________
Возможно сделать все. Вопрос времени |
|
21.03.2022, 23:38 | #5 |
Участник
|
не совсем, есть "уже легаси" код, который использовал генерацию FormTreeControl в коде и перехватывал context и еще несколько методов и докидывал туда нужных меню айтемов
кстати в вашем примере все равно все идет из формы X++: public str getContextMenuOptions() { str ret; int idx; ContextMenu menu = new ContextMenu(); ret = super(); idx = this.getSelection(); if(idx) { tree.select(idx); menu = ctrl.eventTreeItemShowMenu(idx); } menu.OverrideSystemMenu(true); return menu.Serialize(); } |
|
22.03.2022, 06:52 | #6 |
Administrator
|
Хорошо, а глупый вопрос - если в явном виде вызвать у FormTreeControl нужные методы - возникнет ошибка? (Само собой через приведение к Object)
__________________
Возможно сделать все. Вопрос времени |
|
22.03.2022, 08:51 | #7 |
Участник
|
не пробовал, но такое
X++: tree.registerOverrideMethod(methodStr(FormTreeControl, getContextMenuOptions), methodStr(ExtendedTree, OverrideGetContextMenuOptions), this); tree.registerOverrideMethod(methodStr(FormTreeControl, selectedMenuOption), methodStr(ExtendedTree, OverrideSelectedMenuOption), this); The instance method designated by argument 'getContextMenuOptions' does not exist. |
|
22.03.2022, 08:54 | #8 |
Administrator
|
Цитата:
Сообщение от DevAcc
не пробовал, но такое
X++: tree.registerOverrideMethod(methodStr(FormTreeControl, getContextMenuOptions), methodStr(ExtendedTree, OverrideGetContextMenuOptions), this); tree.registerOverrideMethod(methodStr(FormTreeControl, selectedMenuOption), methodStr(ExtendedTree, OverrideSelectedMenuOption), this); The instance method designated by argument 'getContextMenuOptions' does not exist.
__________________
Возможно сделать все. Вопрос времени |
|
22.03.2022, 09:29 | #9 |
Участник
|
У registerOverrideMethod есть третий параметр, возможно, стоит воспользоваться им
|
|
22.03.2022, 09:34 | #10 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: belugin (1). |
|
|