10.10.2013, 08:28 | #1 |
Участник
|
Выбрать более 2х разных элементов в дереве.
Доброго времени суток.
Появилась задачка: Необходимо в дереве выбрать несколько элементов. Я поставил в свойствах элемента дерева SingleSelect = No и у меня прекрасно выбирается через клавишу Shift более 2х элементов, но когда я пытаюсь через ctrl выбрать более 2х элементов, то с первого выбранного элемента теряется выделения. Прошу помочь, аксапта 3.0. P.S. Опыт в программировании AX очень маленький и поэтому прошу более подробнее по возможность разжевать как решить проблему. Большое спасибо. |
|
|
За это сообщение автора поблагодарили: Logger (1). |
10.10.2013, 09:13 | #2 |
Участник
|
Можно воспользоваться checkBox на дереве и выбирать несколько элементов через галки.
|
|
10.10.2013, 09:24 | #3 |
Участник
|
Цитата:
Взять все элементы дерева и смотреть у них свойства? или есть как-то более правильный способ?? и можно как-то указать на какие элементы можно ставить чекбоксы, а на какие нет? |
|
10.10.2013, 09:44 | #4 |
Участник
|
Создать контейнер и при выборе checkBox заносить в этот контейнер.
X++: public int mouseDown(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift) { int ret; TreeItemIdx hitTreeItemIdx; FormTreeItem formTreeItem; Boolean stateChecked; ; ret = super(_x, _y, _button, _Ctrl, _Shift); [ hitTreeItemIdx,f ] = this.hitTest(_x,_y); formTreeItem = this.getItem( hitTreeItemIdx ); if (bitTest(f,#FTCHT_ONITEMICON) || bitTest(f, #FTCHT_ONITEMSTATEICON)) { if( !formTreeItem.stateChecked() ) { stateChecked = true; //установили галку } else { //убрали галку } formTreeItem.stateChecked( stateChecked ); TreeControl.setItem( formTreeItem ); } return ret; } |
|
|
За это сообщение автора поблагодарили: Cardagant (1), user_ax (1), demianimp (1). |
10.10.2013, 09:53 | #5 |
Участник
|
Цитата:
Сам экземпляр FormTreeItem по id можно получить посредством метода treeControl'а getItem(), где параметром будет сохранённый индекс, как указано в сообщении .sparco. P.S. Также можете посмотреть на пример формы дерева: Forms/tutorial_Form_TreeControl. Последний раз редактировалось Cardagant; 10.10.2013 в 10:06. |
|
|
За это сообщение автора поблагодарили: user_ax (1), demianimp (1). |
10.10.2013, 10:19 | #6 |
Участник
|
Цитата:
Сообщение от sparco
Создать контейнер и при выборе checkBox заносить в этот контейнер.
X++: public int mouseDown(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift) { int ret; TreeItemIdx hitTreeItemIdx; FormTreeItem formTreeItem; Boolean stateChecked; ; ret = super(_x, _y, _button, _Ctrl, _Shift); [ hitTreeItemIdx,f ] = this.hitTest(_x,_y); formTreeItem = this.getItem( hitTreeItemIdx ); if (bitTest(f,#FTCHT_ONITEMICON) || bitTest(f, #FTCHT_ONITEMSTATEICON)) { if( !formTreeItem.stateChecked() ) { stateChecked = true; //установили галку } else { //убрали галку } formTreeItem.stateChecked( stateChecked ); TreeControl.setItem( formTreeItem ); } return ret; } |
|
10.10.2013, 10:27 | #7 |
Участник
|
извините не заметил, выдирал из формы, Int.
|
|
10.10.2013, 12:36 | #8 |
Участник
|
Сделал монстра из ответов sparco и Cardagant. Теперь при зажатии ctr и клика по элементу дерева появляется иконка чекбокса.
Спасибо вам за направление мысли =) Если где-то не прав, прошу меня поправить =_= X++: public int mouseDown(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift) { int ret, f; TreeItemIdx hitTreeItemIdx; FormTreeItem formTreeItem; ImageRes stateImage; ; ret = super(_x, _y, _button, _Ctrl, _Shift); if(_Ctrl == 8) { [ hitTreeItemIdx,f ] = this.hitTest(_x,_y); if(f == 4 || f == 2 || f == 64) { formTreeItem = formTreeControl.getItem(hitTreeItemIdx); switch (formTreeItem.stateImage()) { case imageListAppl_checkbox.image(#ImageCheckAll): stateImage = 0; //Убрали выделение break; default: stateImage = imageListAppl_checkbox.image(#ImageCheckAll); //Добавили выделение break; } formTreeItem.stateImage(stateImage); formTreeControl.setItem(formTreeItem); } } return ret; } Последний раз редактировалось demianimp; 10.10.2013 в 12:56. |
|