掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TreeView内でノードの検索をするには? (ID:45128)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
面白そうだったので、ちょっと考えてみました。 ジェネリクスを使っているので、Delphi2009以降ですが・・・(^^; データの区切りは'-'で行っていますので、a-b-c-dのように入力してください。 階層を増やすのであれば、適宜Arrayを変更してください。 エラーチェック等はありません。 TTreeViewとTEditとTButtonを各1個配置 Dic : Array[0..3] of TDictionary<String,TObject>; procedure TForm1.Button1Click(Sender: TObject); var Node,aNode,pNode : TTreeNode; i,j,k,Lv : Integer; Str,Str2,Key : String; begin Node := TreeView1.TopItem; Str := Edit1.Text; Lv := 0; repeat i := Pos('-',Str); pNode := Node; Key := Node.Text; while pNode.Level > 0 do begin pNode := pNode.Parent; Key := pNode.Text + '-' + Key; end; if i > 0 then begin Str2 := Copy(Str,1,i - 1); if not Dic[Lv].ContainsKey(Key + Str2) then begin aNode := TreeView1.Items.AddChildFirst(Node,Str2); Dic[Lv].Add(Key + Str2,TObject(aNode)); Node := aNode; end else begin Node := TTreeNode(Dic[Lv].Items[Key + Str2]); end; Str := Copy(Str,i+1,Length(Str)); Inc(Lv); end else begin if not Dic[Lv].ContainsKey(Key + Str) then begin aNode := TreeView1.Items.AddChild(Node,Str); Dic[Lv].Add(Key + Str,TObject(aNode)); end; end; until i = 0; end; procedure TForm1.FormCreate(Sender: TObject); var i : Integer; begin TreeView1.Items.Add(nil,'Root'); for i := 0 to 3 do begin Dic[i] := TDictionary<String,TObject>.Create; end; end; procedure TForm1.FormDestroy(Sender: TObject); var i : Integer; begin for i := 0 to 3 do begin Dic[i].Clear; Dic[i].Free; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.