Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.12;
Скачать: CL | DM;

Вниз

TreeView   Найти похожие ветки 

 
romeomd ©   (2003-05-31 13:41) [0]

Всем привет.Подскажите пожалуйста как можно реализовать чтобы элементы TreeView можно было перемещать по дереву, т.е. допустим я выделил элемент нажал кнопочку и он перешел на уровень выше, а тот элемент что был сверху спустился бы вниз. Буду рад любым советам. Спасибо за ранее.


 
jack128 ©   (2003-05-31 15:08) [1]

ну рекурсивно обходи детей того элемента, который ты хочешь перенести и создавай дочерние узлы в том элементе, куда ты хочешь перенести. А потом удаляй исходный узел
В чем проблема, то?


 
jack128 ©   (2003-05-31 15:10) [2]

вообще, если подумать - это решение "в лоб" , конечно, но у меня нет уверенности, что другое решение вообще существует...


 
uw ©   (2003-05-31 16:08) [3]

Строй дерево по новой, а перерисовку временно запрещай.


 
Forester ©   (2003-05-31 16:47) [4]

Пример перемещения элемента без построения структуры заново.

TTreeForm = class(TForm)
Tree:TTreeView;
btnMoveNodeUp:TButton;
procedure btnMoveNodeUpClick(Sender:TObject);
private
...
protected
...
public
procedure DecNodePosition(Node: TTreeNode);
published
...
end;

...

implementation

...

procedure TTreeFrm.DecNodePosition(Node: TTreeNode);
var
index:integer;
NodeParent:TTreeNode;
begin
index:=Node.Index;
if index=0 then exit; //двигать некуда
NodeParent:=Node.Parent;
Node.MoveTo(NodeParent[index-1], naInsert); //собственно
//перемещение
end;


procedure TTreeForm.btnMoveNodeUpClick(Sender: TObject);
begin
DecNodePosition(Tree.Selected);
end;

...

end.

Подобным образом можно двигать и вниз, а также на несколько позиций. Если перемещение связано с внесением изменений в какую либо структуру, которую отображает дерево - процедуру DecNodePosition необходимо дописать.


 
romeomd ©   (2003-05-31 16:55) [5]


Спасибо всем за советы, они все позволяют реализовать то что мне надо, но я нашел более простое решение, оказывется у узла есть метод MoveTo, вроде этот метод решает мою проблему, сейчас проверю, так ли это :)


 
romeomd ©   (2003-05-31 16:56) [6]

О, как раз мне Forester и код подкинул :) Спасибо :)



Страницы: 1 вся ветка

Текущий архив: 2003.06.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-34902
Andrey02
2003-06-01 13:13
2003.06.12
Полностью раздвинуть приложение на весь экран


1-34792
wera
2003-06-02 13:48
2003.06.12
StringGrid1


3-34723
kozovoy
2003-05-22 13:52
2003.06.12
После завершения программы она остается как процесс.


3-34689
nik8282
2003-05-22 10:28
2003.06.12
DCOM


3-34680
Andy Eremin
2003-05-20 07:48
2003.06.12
Базы данных