안녕하세요. 최용일입니다.
TreeView.Items의 메소드들을 이용해서 적절하게 검색하시면 될텐데요...
type
TForm1 = class(TForm)
private
procedure AddNode;
function IsFoundNode(BaseNode: TTreeNode; FindText: string; var FoundNode: TTreeNode): Boolean;
......
end;
implementation
procedure TForm1.AddNode;
var
BaseNode: TTreeNode; // 기준이 되는 노드, 03이라는 노드
FoundNode: TTreeNode; // 발견된 노드, 21이라는 노드
NewNode: TTreeNode; // 새로 추가될 노드, 테스트_0이라는 노드
begin
BaseNode := 03이라는 노드로 설정
// 03이라는 노드에서 21이라는 차일드노드가 발견되었다면
if FindNode(BaseNode, '21', FoundNode) then
// 21이라는 노드에 테스트_0이라는 노드 삽입
TreeView1.Items.AddChild(FoundNode, '테스트_0')
else // 발견되지 않았다면
begin
// 03이라는 노드에 21이라는 노드 삽입
NewNode := TreeView1.Items.AddChild(BaseNode, '21');
// 21이라는 노드에 테스트_0이라는 노드 삽입
TreeView1.Items.AddChild(NewNode, '테스트_0');
end;
end;
// BaseNode의 차일드를 검색해서 FindText를 가지는 노드를 찾는 함수, 찾은 노드는
// FoundNode에 반환함, 찾으면 Result = True를 반환
function TForm1.FindNode(BaseNode: TTreeNode; FindText: string; var FoundNode: TTreeNode): Boolean;
var
Node: TTreeNode;
begin
Result := False;
FoundNode := nil;
Node := BaseNode.GetFirstChild;
repeat
// 21이라는 노드가 있는지 검색
if CompareText(Node.Text, FindText) = 0 then
begin
Result := True;
FoundNode := Node;
Exit;
end;
Node := Node.GetNextChild(Node);
until Node = nil;
end;
end.
^^ 항상 즐코하세요...
장재형 wrote:
> 안녕하세요..
> 바쁘신 와중에라도 짬을 내어서 가르켜 주시면 감사하겠습니다.
>
> 아래 그림에서 03의 서브 노드로 21을 추가하고자 할때 기존의 서브 노드인 19, 20,
> 21, 22만을 검색해서 이미 존재하는 노드이면 기존 21의 서브 노드로 "테스트_0"을
> 추가하고, 존재하지 않으면 03의 서브 노드로 21을 추가, 그리고 21의 서브 노드로
> "테스트_0"을 추가 하고자 합니다.
>
> 고수님들의 조언을 기다립니다.
>
> 2001---03
> | | |__19
> | | | |__테스트_1
> | | | |__테스트_2
> | | | |__테스트_3
> | | |
> | | |__20
> | | | |__테스트_4
> | | | |__테스트_5
> | | |
> | | |__21
> | | | |__테스트_6
> | | |
> | | |__22
> | | |__테스트_7
> | |
> | -04
> | |__21
> | | |__테스트_6
> | |
> | |__22
> | |__테스트_7
> 2002--22
> |__23
> | |__테스트_1
> | |__테스트_3
> |
> |__24
> |__테스트_4
>