お気に入りのノードを検索してツリーを展開して表示するには?

解決


武田  2006-02-25 23:35:39  No: 20212

皆様にいつもお世話になっております。
TreeViewにお気に入りを表示させています。
お気に入りの項目を検索して合致したら、選択状態にして表示させようとしています。
ところが2階層以下のフォルダにある場合ツリーを展開してくれません。
そのため検索して反転表示していてもノードを展開してくれないため目的のノードを発見できません。
TreeView1.FullExpandなどもNode.Expanded:=true;も試していますが実現できませんでした。
方法がありましたら、ご指導お願いできませんでしょうか。m(_ _)m

procedure TForm1.ToolButton1Click(Sender: TObject);
var
    Node:TTreeNode;

begin
        Node := Form1.TreeView1.Items.GetFirstNode;
    while Node <> nil do
    begin
        strTitle := Node.Text;
        if '検索文字列'=strTitle then
        begin
                        Node.Selected:=true;
            Node.Expanded:=true;
            ShowMessage('一致しました '+ Node.Text);
            exit;
        end;
        Node := Node.GetNext;
    end;
end;


はてな  2006-02-26 19:04:34  No: 20213

ドコが問題なのかな、何も不具合無いけど。


武田  2006-02-26 21:23:16  No: 20214

はてなさん、お返事有り難うございます。
説明不足ですみません。例えば
aフォルダの下にaの子フォルダ、aの子フォルダの下に「あああ」というノードがあるとき、このツリーが閉じているとします。
Node.Textを検索して合致したら、このツリーを全部開いて3層目にある「あああ」というノードをセレクトして表示したいわけです。
aのすぐ下にあるノードは、ツリーを展開して表示してくれます。
(1階層下までは開いてくれます)
しかし、さらにその下、つまりaの子フォルダの下にあるノード「あああ」はツリーを展開して表示してくれません。
ヘルプには「すべてのノードを展開して表示する」と書いてあるのにおかしいなと、困っている次第です。
なお、予めツリーを開いておいて検索すると、セレクトして表示してくれます。
私のヘルプの解釈に誤解があるかもしれません。
または、皆さんの環境で問題ないと解っただけでも助かります。
私のプログラムが何か影響しているかもしれませんので、引き続き調べます。
有り難うございました。m(_ _)m


ママん  2006-02-27 01:03:56  No: 20215

最近標準コンポ使ってないもんで、
もしかしたら関数があるかもしれませんが。

procedure TForm1.OpenTreeNode(Node:TTreeNode);
//指定したノードを見えるように表示する
begin
  Node.Selected:=True;
  repeat
    if Node.Parent<>nil then
      Node.Parent.Expanded:=True;
    Node:=Node.Parent;
  until Node=nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenTreeNode(TreeView1.Items[2]);
  TreeView1.SetFocus;
end;


武田  2006-02-28 02:46:13  No: 20216

ママんさま、ご指導有り難うございました。
まだ、小生の環境では実現しておりませんが、参考にしながら引き続き原因追及にトライしております。
この件に関して一応解決とさせていただきます。
有り難うございました。m(_ _)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加