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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.10.2013, 08:28   #1  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Выбрать более 2х разных элементов в дереве.
Доброго времени суток.

Появилась задачка: Необходимо в дереве выбрать несколько элементов.
Я поставил в свойствах элемента дерева SingleSelect = No и у меня прекрасно выбирается через клавишу Shift более 2х элементов, но когда я пытаюсь через ctrl выбрать более 2х элементов, то с первого выбранного элемента теряется выделения.

Прошу помочь, аксапта 3.0.

P.S. Опыт в программировании AX очень маленький и поэтому прошу более подробнее по возможность разжевать как решить проблему.

Большое спасибо.
За это сообщение автора поблагодарили: Logger (1).
Старый 10.10.2013, 09:13   #2  
sparco is offline
sparco
Участник
Самостоятельные клиенты AX
 
44 / 21 (1) +++
Регистрация: 10.10.2011
Адрес: Москва
Можно воспользоваться checkBox на дереве и выбирать несколько элементов через галки.
Старый 10.10.2013, 09:24   #3  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от sparco Посмотреть сообщение
Можно воспользоваться checkBox на дереве и выбирать несколько элементов через галки.
Встречный вопрос, а как пробегаться по выбранным чекбоксам?

Взять все элементы дерева и смотреть у них свойства? или есть как-то более правильный способ?? и можно как-то указать на какие элементы можно ставить чекбоксы, а на какие нет?
Старый 10.10.2013, 09:44   #4  
sparco is offline
sparco
Участник
Самостоятельные клиенты AX
 
44 / 21 (1) +++
Регистрация: 10.10.2011
Адрес: Москва
Создать контейнер и при выборе 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  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от demianimp Посмотреть сообщение
Встречный вопрос, а как пробегаться по выбранным чекбоксам?

Взять все элементы дерева и смотреть у них свойства? или есть как-то более правильный способ?? и можно как-то указать на какие элементы можно ставить чекбоксы, а на какие нет?
Можно сохранять также, помимо контейнера, в некоторую структуру коллекции типа множества или мэпа (смотря какая задача стоит) ссылку по id на выделенный элемент и идти уже энумератором по этой коллекции.
Сам экземпляр 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  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от 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;
}
в том месте где идет установка галки можно и поставить условие на то что можно устанавливать или нет.
Простите, а f это что за переменная?
Старый 10.10.2013, 10:27   #7  
sparco is offline
sparco
Участник
Самостоятельные клиенты AX
 
44 / 21 (1) +++
Регистрация: 10.10.2011
Адрес: Москва
извините не заметил, выдирал из формы, Int.
Старый 10.10.2013, 12:36   #8  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Сделал монстра из ответов 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.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
16 и более полей в InventDim Ievgenii DAX: Функционал 12 13.10.2011 13:56
Данный из разных компаний в WebForm kashperuk DAX: Программирование 0 14.06.2006 01:11
2 и более OUTER JOIN к одному паренту Ronin DAX: Программирование 21 19.12.2005 13:42
поддержка приложений разных версий в Аксапта 2.5 asaev DAX: Администрирование 16 28.11.2003 16:37
Интеграция элементов бизнес-логики Maxim Gorbunov DAX: База знаний и проекты 0 11.12.2001 20:18
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:31.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.