AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 10.10.2013, 08:28   #1  
demianimp ist offline
demianimp
Участник
 
202 / 104 (4) +++++
Registriert seit: 10.10.2013
Выбрать более 2х разных элементов в дереве.
Доброго времени суток.

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

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

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

Большое спасибо.
This post has been rated by: Logger (1).
Alt 10.10.2013, 09:13   #2  
sparco ist offline
sparco
Участник
Самостоятельные клиенты AX
 
44 / 21 (1) +++
Registriert seit: 10.10.2011
Ort: Москва
Можно воспользоваться checkBox на дереве и выбирать несколько элементов через галки.
Alt 10.10.2013, 09:24   #3  
demianimp ist offline
demianimp
Участник
 
202 / 104 (4) +++++
Registriert seit: 10.10.2013
Zitat:
Zitat von sparco Beitrag anzeigen
Можно воспользоваться checkBox на дереве и выбирать несколько элементов через галки.
Встречный вопрос, а как пробегаться по выбранным чекбоксам?

Взять все элементы дерева и смотреть у них свойства? или есть как-то более правильный способ?? и можно как-то указать на какие элементы можно ставить чекбоксы, а на какие нет?
Alt 10.10.2013, 09:44   #4  
sparco ist offline
sparco
Участник
Самостоятельные клиенты AX
 
44 / 21 (1) +++
Registriert seit: 10.10.2011
Ort: Москва
Создать контейнер и при выборе 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;
}
в том месте где идет установка галки можно и поставить условие на то что можно устанавливать или нет.
This post has been rated by: Cardagant (1), user_ax (1), demianimp (1).
Alt 10.10.2013, 09:53   #5  
Cardagant ist offline
Cardagant
Участник
 
317 / 54 (2) ++++
Registriert seit: 11.10.2011
Zitat:
Zitat von demianimp Beitrag anzeigen
Встречный вопрос, а как пробегаться по выбранным чекбоксам?

Взять все элементы дерева и смотреть у них свойства? или есть как-то более правильный способ?? и можно как-то указать на какие элементы можно ставить чекбоксы, а на какие нет?
Можно сохранять также, помимо контейнера, в некоторую структуру коллекции типа множества или мэпа (смотря какая задача стоит) ссылку по id на выделенный элемент и идти уже энумератором по этой коллекции.
Сам экземпляр FormTreeItem по id можно получить посредством метода treeControl'а getItem(), где параметром будет сохранённый индекс, как указано в сообщении .sparco.

P.S. Также можете посмотреть на пример формы дерева: Forms/tutorial_Form_TreeControl.

Geändert von Cardagant (10.10.2013 um 10:06 Uhr)
This post has been rated by: user_ax (1), demianimp (1).
Alt 10.10.2013, 10:19   #6  
demianimp ist offline
demianimp
Участник
 
202 / 104 (4) +++++
Registriert seit: 10.10.2013
Zitat:
Zitat von sparco Beitrag anzeigen
Создать контейнер и при выборе 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 это что за переменная?
Alt 10.10.2013, 10:27   #7  
sparco ist offline
sparco
Участник
Самостоятельные клиенты AX
 
44 / 21 (1) +++
Registriert seit: 10.10.2011
Ort: Москва
извините не заметил, выдирал из формы, Int.
Alt 10.10.2013, 12:36   #8  
demianimp ist offline
demianimp
Участник
 
202 / 104 (4) +++++
Registriert seit: 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;
}

Geändert von demianimp (10.10.2013 um 12:56 Uhr)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 13:59 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.