Q&A

  • Treeview에서의 이동
트리뷰 2개를 써서 노드의 이동을 자유롭게 하려고 합니다.

트리뷰A내에서는 물론, 트리뷰 A와 B간의 이동도 가능하게 하려 합니다.

다음과 같이 코딩을 했더니 이동은 가능한데 서브아이템이 없어져 버리네요.

고수님들의 가르침 부탁합니다.



procedure TForm1.TreeViewsDragDrop(Sender, Source: TObject; X, Y: Integer);

var

AnItem: TTreeNode;

SourceTree, TargetTree: TTreeView;

begin

SourceTree := Source as TTreeView;

TargetTree := Sender as TTreeView;



if SourceTree.Selected = nil then Exit;

AnItem := TargetTree.GetNodeAt(X,Y);



TargetTree.Items.AddChild(AnItem, SourceTree.Selected.Text);

SourceTree.Items.Delete(SourceTree.Selected);

end;

2  COMMENTS
  • Profile
    김경식 2001.02.06 03:12
    실질적으로 지금의 작업은 이동이 되는게 아니라 TargetTree에 새로운 노드를 만들고, SourceTree에서 선택된 노드를 삭제 하는게 아닌가 생각됩니다.

    이동을 하실려면 TTreeNode.MoveTo를 참조하시면 되지 않을까 합니다.

    소스를 적어 드리면 좋겠지만, 저도 초보라 시간이 너무 걸릴 것 같네요...-_-;;

    대충 적어보면

    SourceTree.Selected.MoveTo(AnItem, naAddChild);

    쯤 되지 않을까 하네요. 테스트는 안해 봤어요.

    성공을 빌며...



    궁금녀 wrote:

    > 트리뷰 2개를 써서 노드의 이동을 자유롭게 하려고 합니다.

    > 트리뷰A내에서는 물론, 트리뷰 A와 B간의 이동도 가능하게 하려 합니다.

    > 다음과 같이 코딩을 했더니 이동은 가능한데 서브아이템이 없어져 버리네요.

    > 고수님들의 가르침 부탁합니다.

    >

    > procedure TForm1.TreeViewsDragDrop(Sender, Source: TObject; X, Y: Integer);

    > var

    > AnItem: TTreeNode;

    > SourceTree, TargetTree: TTreeView;

    > begin

    > SourceTree := Source as TTreeView;

    > TargetTree := Sender as TTreeView;

    >

    > if SourceTree.Selected = nil then Exit;

    > AnItem := TargetTree.GetNodeAt(X,Y);

    >

    > TargetTree.Items.AddChild(AnItem, SourceTree.Selected.Text);

    > SourceTree.Items.Delete(SourceTree.Selected);

    > end;

  • Profile
    궁금녀 2001.02.06 03:32
    김경식님, 답변 감사합니다.

    moveto는 동일 트리내에서는 이동이 잘 되는 데 다른 트리로의 이동이 자유롭지 못하더군요.assign을 쓰면 된다고 하는데 잘 모르겠어여..ㅠ.ㅠ





    김경식 wrote:

    > 실질적으로 지금의 작업은 이동이 되는게 아니라 TargetTree에 새로운 노드를 만들고, SourceTree에서 선택된 노드를 삭제 하는게 아닌가 생각됩니다.

    > 이동을 하실려면 TTreeNode.MoveTo를 참조하시면 되지 않을까 합니다.

    > 소스를 적어 드리면 좋겠지만, 저도 초보라 시간이 너무 걸릴 것 같네요...-_-;;

    > 대충 적어보면

    > SourceTree.Selected.MoveTo(AnItem, naAddChild);

    > 쯤 되지 않을까 하네요. 테스트는 안해 봤어요.

    > 성공을 빌며...

    >

    > 궁금녀 wrote:

    > > 트리뷰 2개를 써서 노드의 이동을 자유롭게 하려고 합니다.

    > > 트리뷰A내에서는 물론, 트리뷰 A와 B간의 이동도 가능하게 하려 합니다.

    > > 다음과 같이 코딩을 했더니 이동은 가능한데 서브아이템이 없어져 버리네요.

    > > 고수님들의 가르침 부탁합니다.

    > >

    > > procedure TForm1.TreeViewsDragDrop(Sender, Source: TObject; X, Y: Integer);

    > > var

    > > AnItem: TTreeNode;

    > > SourceTree, TargetTree: TTreeView;

    > > begin

    > > SourceTree := Source as TTreeView;

    > > TargetTree := Sender as TTreeView;

    > >

    > > if SourceTree.Selected = nil then Exit;

    > > AnItem := TargetTree.GetNodeAt(X,Y);

    > >

    > > TargetTree.Items.AddChild(AnItem, SourceTree.Selected.Text);

    > > SourceTree.Items.Delete(SourceTree.Selected);

    > > end;