TreeViewで全て選択を実現するには?

解決


おかちまち  2007-10-28 20:20:28  No: 28124

TreeView上で右クリックして全てのitemを
選択状態にしたいのですがうまくできません。
以下の例ではひとつずつ選択していき
最後のitemを選択して終わってしまいます。
ご教授の程よろしくお願い致します。

ちなみにexpandedの状態は保持して可視できるものを
全て選択できるようにしたいのですがまずは動的な
複数選択の実現が先ですのでこのように質問させて頂きました。

procedure TForm1.allselectClick(Sender: TObject);
var
i:integer;
begin
  treeview1.MultiSelect:=true;
  for i := 0 to treeview1.Items.Count-1 do
  begin
    treeview1.Items.Item[i].Selected:=true;
  end;
end;

環境は
Borland Developer Studio 2006 Professional
windowsXP proです。


通りすがり  2007-10-28 22:41:19  No: 28125

違っていたらゴメンナサイ
var
  I, VisibleCount: Integer;
  Nodes: array of TTreeNode;
begin
  TreeView1.MultiSelect := True;
  //
  VisibleCount := 0;
  SetLength(Nodes,TreeView1.Items.Count);
  for I := 0 to TreeView1.Items.Count - 1 do
  begin
    if TreeView1.Items[I].IsVisible then
    begin
      Nodes[VisibleCount] := TreeView1.Items[I];
      Inc(VisibleCount);
    end;
  end;
  SetLength(Nodes,VisibleCount);
  //
  TreeView1.Select(Nodes);
end;


もしかして  2007-10-29 00:28:18  No: 28126

TTreeNode.IsVisible ですか?


おかちまち  2007-10-29 02:21:06  No: 28127

もしかしてさん
TTreeNode.IsVisibleではありません。
通りすがりさんの例で無事解決できました。
一旦nodesを作ってselextするのですね。
いやー、勉強になりました。
ヘルプを見てもそういう風にするとは
わかりませんでした(^_^;)
この掲示板のおかげで逆引きできて助かってます。
お手数をおかけして申し訳ありませんでした。


迂回路  2007-10-29 03:17:11  No: 28128

路は多い方がいいよね。

 with Treeview1 do begin
  MultiSelect := True;
  MultiSelectStyle := [msShiftSelect, msVisibleOnly];
  Items[0].Selected := True;
  Select(Items[Items.Count-1], [ssShift]);
  SetFocus;
 end;


おかちまち  2007-10-29 04:09:36  No: 28129

迂回路さんありがとうございます。
こちらは、マウスで操作するのと同様に
最初のitemを選択して最後のあitemの
選択時に(ここがミソかな?)ssShiftで
shiftキーの選択をするということですね。
はずかしながらこのSELECTのヘルプを見たとき
ssShiftの記入方法が[]を使うことが
わかりませんでした。集合ですもんね。
路は多いほうがいいです。
ありがとうご会いました。


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

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






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