皆様にいつもお世話になっております。
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;
ドコが問題なのかな、何も不具合無いけど。
はてなさん、お返事有り難うございます。
説明不足ですみません。例えば
aフォルダの下にaの子フォルダ、aの子フォルダの下に「あああ」というノードがあるとき、このツリーが閉じているとします。
Node.Textを検索して合致したら、このツリーを全部開いて3層目にある「あああ」というノードをセレクトして表示したいわけです。
aのすぐ下にあるノードは、ツリーを展開して表示してくれます。
(1階層下までは開いてくれます)
しかし、さらにその下、つまりaの子フォルダの下にあるノード「あああ」はツリーを展開して表示してくれません。
ヘルプには「すべてのノードを展開して表示する」と書いてあるのにおかしいなと、困っている次第です。
なお、予めツリーを開いておいて検索すると、セレクトして表示してくれます。
私のヘルプの解釈に誤解があるかもしれません。
または、皆さんの環境で問題ないと解っただけでも助かります。
私のプログラムが何か影響しているかもしれませんので、引き続き調べます。
有り難うございました。m(_ _)m
最近標準コンポ使ってないもんで、
もしかしたら関数があるかもしれませんが。
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;
ママんさま、ご指導有り難うございました。
まだ、小生の環境では実現しておりませんが、参考にしながら引き続き原因追及にトライしております。
この件に関して一応解決とさせていただきます。
有り難うございました。m(_ _)m
ツイート | ![]() |