Q&A

  • Re: 트리뷰 컴포넌트에서 검색하기
안녕하세요. 최용일입니다.



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

>

0  COMMENTS