|  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. | 
|  |