TreeViewで、プログラムから、多重選択および多重選択したItemを解除する方法が、解りません。Delphi6 Pro使用、MultiSelect:True、RowSelect:true
に設定。
選択時
[1]for N:=0 to TrreeView1.count-1 do
if AnsiPos(S, TreeView1.Items[N].Text)>0 then
Treevierw1.Items[N].selected:=true;
としています。SelectionsCount=1のまま(最終選択されたもの)
選択時の解除
[Control]キーを選択し、SelectsCount>1確認後
[2]for N:=0 to TrreeView1.count-1 do
if TrreeView1.Items[N].selected then
TrreeView1.Items[N].selected :=false;
エラーが、でる。
[3]TreeView1.ClearSelection:動作はs、するが、エラーが、でる
選択および解除とも、動作しません。
関係ないかもしれませんが・・・
>[2]for N:=0 to TrreeView1.count-1 do
> if TrreeView1.Items[N].selected then
> TrreeView1.Items[N].selected :=false;
> エラーが、でる。
コンパイル時にエラーがでるのなら、
誤:TrreeView1
正:TreeView1
のような・・・
あと、“エラーが、でる”と書く場合、エラーメッセージも記載したほうが、よいかと思います。
試したところ、[1]のやり方では、選択できないみたいですね。
# マウスクリックで複数選択した場合、選択したItemはSelections プロパティを参照すればよさそうですけど、
# このSelectionsに追加・削除って出来るんですかね?
試していないですが、選択に関しては
■ TreeViewで全て選択を実現するには?
https://www.petitmonte.com/bbs/answers?question_id=5174
とか、参考になるかもしれません。
あと、
>[3]TreeView1.ClearSelection:動作はs、するが、エラーが、でる
とのことですが、
試したところ、ClearSelectionメソッドは、エラーもなく、選択解除できました。
igyさん、いろいろ検討いただき有難うございます。
[1]TrreeView1は、タイプミスです。
[2]TreeViewで全て選択を実現するには?では、
合致したItemは、検知できますが、TreeViewに、表示は、出来ません。
[3]ClearSelection:TreeView1.ClearSelection(True)で、
Selections[0]は、削除できていません。
TreeView1.ClearSelection:エラーが発生:Read of ....
以上 宜しくお願いします。
> 合致したItemは、検知できますが、TreeViewに、表示は、出来ません。
選択を試したところ、期待どおり選択されましたが、
"表示は、出来ません。"というのは、具体的に、何が表示出来ないのですか?
>[3]ClearSelection:TreeView1.ClearSelection(True)で、
> Selections[0]は、削除できていません。
もし、これが、"Selections プロパティの最初の要素が選択解除できない"という意味なら、
ClearSelectionメソッドのヘルプには、
>ClearSelection メソッドは,メイン選択ノードを除いて(オプション),すべてのノードの選択を解除します。
>説明
>ClearSelection メソッドは,すべてのノードの選択を解除します。KeepPrimary パラメータが true ならば,主選択 (Selections プロパティの最初の要素) はトグルしません。
と書いてあります・・・
あと、
> TreeView1.ClearSelection:エラーが発生:Read of ....
これが、エラーメッセージのことなら、こちらでは、そのエラーメッセージは表示されませんでした。
igy さん、ご指摘のKeepPrimary パラメータの件は、
[1]TreeView1.ClearSelection(false)に設定した場合は、Selectedが、
nilになり、エラーがでるのでは。
削除の方は、ClearSelection(True)で、
TreeView1.SelectedをTreeView1.Items[0]に移動させて、選択Item
が、解除されますので、解除の方は、解決です。
[2]選択の方は
合致したItemは、検知できますが:[Control]キーで設定したItemを
見っける事ができても、TreeView1に、表示は、出来ません。
for n:=0 to Treeview1.Items.Count-1 do
begin
if AnsiPos(S,TreeView1.Items[N])>0 then //検知
TreeView1.Items[N].Selected:=False // 表示
end;
表示は、多重選択の場合、Selectedは、1番最後のItemが、
TreeView1.SelectionCount=1で、Focus(Selected)されるのみです。
Selectionsに追加については、判りません。
>[2]選択の方は
ですが、上で書き込んだ、
> 選択を試したところ、期待どおり選択されましたが、
というのは、
>■ TreeViewで全て選択を実現するには?
>https://www.petitmonte.com/bbs/answers?question_id=5174
での、“通りすがり”さんのやり方を試した結果です。
igyさま、お手数かけます。
、“通りすがり”さんのやり方を試した結果:だめでした
>“通りすがり”さんのやり方を試した結果:だめでした
"だめでした"というのは、具体的に、何がだめでしたか?
igyさま、お手数かけます。
TreeView1.Selectedの多重表示です(Multi Selectd)
> TreeView1.Selectedの多重表示です(Multi Selectd)
上で
> 試したところ、[1]のやり方では、選択できないみたいですね。
と書き込んだとおり、複数のSelected プロパティにTrueを設定する方法ができないみたいなので、
“通りすがり”さんのやり方
《Nodes[] に格納し、最後にTreeView1.Select(Nodes)で選択する方法》
で、複数選択する方法だと、期待どおり複数選択できましたが、
>“通りすがり”さんのやり方を試した結果:だめでした
というのは、どのようなコードを記述し、だめと判断したのですか?
(複数選択自体されると思いますし、選択された項目はSelections プロパティを参照すればよさそうですけど。)
このままでは「うちではできた」「こっちではできません」の平行線にしかなりませんね……もっと情報を出してくれないと。
そもそも、何を期待していてそれがどうだから「できない」と言っているのか、Hiisan以外の誰にもわかっていないと思います。
「表示は、出来ません」と言っていますが、それは画面上でツリービューのノードが選択状態にならないということを言っていますか?
ちなみにリンク先にある通りすがりさんのやり方は、展開されていないノードはとばして、現在展開済みで見えているノードだけ選択するようになっています。
そこは同じ条件で大丈夫ですか?
igyさま、お手数かけます。
S:検索文字
for N:=0 to TreeView1.Items.Count-1 do
begin
if Ansipos(S, TreeView1.Items[N].text)>0 then
Treview1.Select(TV3.Items[N],[ssCtrl]);
end;
これで、SelectionCountが、Sの合致数と会い、
Multi Selectedも動作しました。
色々お手数を、御掛け致しました。
igyさま、色々御助言有難うございました。
こちらの、説明不足でした。
[まとめ]
TreeView1の設定:Multiselect:true;
MultiSelect:msControlSelect
[多重選択]
S:検索文字
for N:=0 to TreeView1.Items.Count-1 do
begin
if Ansipos(S, TreeView1.Items[N].text)>0 then
Treview1.Select(Treeview1.Items[N],[ssCtrl]);
end;
[多重解除]
TreeView1.ClearSelect(True);
ツイート | ![]() |