TreeViewで、プログラムから、多重選択および多重選択したItemを解除する方法

解決


Hiisan  2015-03-22 05:36:34  No: 47145

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、するが、エラーが、でる
選択および解除とも、動作しません。


igy  2015-03-22 08:17:57  No: 47146

関係ないかもしれませんが・・・

>[2]for  N:=0 to TrreeView1.count-1 do
>  if TrreeView1.Items[N].selected then
>     TrreeView1.Items[N].selected :=false;
>  エラーが、でる。

コンパイル時にエラーがでるのなら、

誤:TrreeView1
正:TreeView1

のような・・・

あと、“エラーが、でる”と書く場合、エラーメッセージも記載したほうが、よいかと思います。


igy  2015-03-22 08:58:08  No: 47147

試したところ、[1]のやり方では、選択できないみたいですね。
# マウスクリックで複数選択した場合、選択したItemはSelections プロパティを参照すればよさそうですけど、
# このSelectionsに追加・削除って出来るんですかね?


igy  2015-03-22 09:27:14  No: 47148

試していないですが、選択に関しては

■ TreeViewで全て選択を実現するには?
https://www.petitmonte.com/bbs/answers?question_id=5174

とか、参考になるかもしれません。

あと、

>[3]TreeView1.ClearSelection:動作はs、するが、エラーが、でる

とのことですが、
試したところ、ClearSelectionメソッドは、エラーもなく、選択解除できました。


Hiisan  2015-03-22 17:25:57  No: 47149

igyさん、いろいろ検討いただき有難うございます。
[1]TrreeView1は、タイプミスです。
[2]TreeViewで全て選択を実現するには?では、
    合致したItemは、検知できますが、TreeViewに、表示は、出来ません。
[3]ClearSelection:TreeView1.ClearSelection(True)で、
          Selections[0]は、削除できていません。
    TreeView1.ClearSelection:エラーが発生:Read of ....
以上  宜しくお願いします。


igy  2015-03-22 18:29:51  No: 47150

>    合致したItemは、検知できますが、TreeViewに、表示は、出来ません。

選択を試したところ、期待どおり選択されましたが、
"表示は、出来ません。"というのは、具体的に、何が表示出来ないのですか?

>[3]ClearSelection:TreeView1.ClearSelection(True)で、
>          Selections[0]は、削除できていません。

もし、これが、"Selections プロパティの最初の要素が選択解除できない"という意味なら、
ClearSelectionメソッドのヘルプには、

>ClearSelection メソッドは,メイン選択ノードを除いて(オプション),すべてのノードの選択を解除します。
>説明
>ClearSelection メソッドは,すべてのノードの選択を解除します。KeepPrimary パラメータが true ならば,主選択 (Selections プロパティの最初の要素) はトグルしません。

と書いてあります・・・

あと、
>    TreeView1.ClearSelection:エラーが発生:Read of ....
これが、エラーメッセージのことなら、こちらでは、そのエラーメッセージは表示されませんでした。


Hiisan  2015-03-23 05:13:18  No: 47151

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に追加については、判りません。


igy  2015-03-23 05:21:03  No: 47152

>[2]選択の方は

ですが、上で書き込んだ、

> 選択を試したところ、期待どおり選択されましたが、

というのは、

>■ TreeViewで全て選択を実現するには?
>https://www.petitmonte.com/bbs/answers?question_id=5174

での、“通りすがり”さんのやり方を試した結果です。


Hiisan  2015-03-23 05:30:54  No: 47153

igyさま、お手数かけます。
、“通りすがり”さんのやり方を試した結果:だめでした


igy  2015-03-23 05:53:33  No: 47154

>“通りすがり”さんのやり方を試した結果:だめでした

"だめでした"というのは、具体的に、何がだめでしたか?


Hiisan  2015-03-23 05:57:03  No: 47155

igyさま、お手数かけます。
TreeView1.Selectedの多重表示です(Multi Selectd)


igy  2015-03-23 06:12:31  No: 47156

> TreeView1.Selectedの多重表示です(Multi Selectd)

上で

> 試したところ、[1]のやり方では、選択できないみたいですね。

と書き込んだとおり、複数のSelected プロパティにTrueを設定する方法ができないみたいなので、

“通りすがり”さんのやり方
  《Nodes[] に格納し、最後にTreeView1.Select(Nodes)で選択する方法》
で、複数選択する方法だと、期待どおり複数選択できましたが、

>“通りすがり”さんのやり方を試した結果:だめでした

というのは、どのようなコードを記述し、だめと判断したのですか?
(複数選択自体されると思いますし、選択された項目はSelections プロパティを参照すればよさそうですけど。)


tor  2015-03-23 06:21:04  No: 47157

このままでは「うちではできた」「こっちではできません」の平行線にしかなりませんね……もっと情報を出してくれないと。
そもそも、何を期待していてそれがどうだから「できない」と言っているのか、Hiisan以外の誰にもわかっていないと思います。
「表示は、出来ません」と言っていますが、それは画面上でツリービューのノードが選択状態にならないということを言っていますか?

ちなみにリンク先にある通りすがりさんのやり方は、展開されていないノードはとばして、現在展開済みで見えているノードだけ選択するようになっています。
そこは同じ条件で大丈夫ですか?


Hiisan  2015-03-23 06:38:51  No: 47158

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も動作しました。
色々お手数を、御掛け致しました。


Hiisan  2015-03-24 00:40:37  No: 47159

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);


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

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






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