Q&A

  • treeview 질문입니다...
트리뷰가 A,B 2개가 있을때,

버튼을 클릭하면 ,

A에서 선택한 노드와 그 자식들를 그대로 B로 옮기고 싶거든요..

A에서는 그 노드가 삭제되고요...(이건 해결할 수 있습니다 ^^;;)

근데 선택한 노드의 하위 아이템을 전부 읽어 들이기가 어렵습니다.

누군가 힌트라도 좀....

급합니다.

그럼 좋은 하루 되세요.
3  COMMENTS
  • Profile
    최용일 2002.06.06 20:39
    안녕하세요. .최용일입니다.

    그냥 재귀호출써서 모두 복사하시면 될텐데요...

    procedure TForm1.Button1Click(Sender: TObject);
    // TreeView1.Selected => TreeView2's RootNode
    var
        Item: TTreeNode;
    begin
        if (TreeView1.Selected <> nil) then
        begin
            Item := TreeView2.Items.Add(nil, '');
            Item.Assign(TreeView1.Selected);

            CopyChildNode(TreeView1, TreeView2, TreeView1.Selected, Item);

            TreeView1.Items.Delete(TreeView1.Selected);
        end;
    end;

    procedure TForm1.CopyChildNode(SourceTreeView, DestTreeView: TTreeView; Source, Dest: TTreeNode);
    var
        Index: Integer;
        Item: TTreeNode;
    begin
        for Index := 0 to Source.Count - 1 do
        begin
            // Copies Node
            Item := DestTreeView.Items.AddChild(Dest, '');
            Item.Assign(Source[Index]);

            // Copy Child Nodes
            if Source.Item[Index].HasChildren then
                CopyChildNode(SourceTreeView, DestTreeView, Source[Index], Item);
        end;

        // Deletes Node
        for Index := Source.Count - 1 to 0 do
            SourceTreeView.Items.Delete(Source[Index]);
    end;

    ^^ 항상 즐코하세요...

  • Profile
    김진호 2002.06.07 03:37
    정말 감사드립니다. 헤헤

    혹시 괜찮으시면, 다음도 조언을 얻고 싶은데요..

    너무 염치없죠.

    예를들어, 트리뷰가 다음과 같다면,

      a
          b
             c
             d
         e
             f
               g
               h
         i

    이걸 다음과 같은 식으로 출력하고 싶습니다.

      a b c
      a b d
      a e f g
      a e f h
      a i

    트리뷰가 이렇게 어려운 줄 몰랐습니다.

    아무쪼록 잘 부탁드립니다.

    그럼 또.^^;;
  • Profile
    최용일 2002.06.07 07:41
    이것두 재귀호출하시면 될건데요...

    자식노드로 계속해서 재귀호출로 들어가서 더 이상 자식노드를 가지지 않으면 부모노드(TTreeNode.Parent)로 거슬러 올라가면서 노드의 Caption을 찍으시면 될겁니다.

    ^^ 항상 즐코하세요...