TreeViewにおけるShowBars=Trueでクリックしても選択されるのはルートItem だけ?

解決


オン赤  2002-09-02 02:43:36  No: 1410

TreeView のproperty: ShowBarsをTrue にすると +/- が表示されますね。その状態で、アイテムの+/-のところをねらってクリックすると、自動的にexpand / collaps されるまではいいのですが、その時いつもルートフォルダが選択されてしまうのはどうしてですか?

下記のように各アイテムのクリックイベントを書いているのですが、使えません。
+/-付きのクリックされたアイテムを正確に選択状態にする方法が分かりません。

また、ShowBars=False  にすれば各アイテムは選択状態になりますが、次のようなコードを書いてもビットイメージ切り替え結果がTreeView上に現れません。Updateなんて試してもだめですね。アドバイスをお願いいたします。

procedure TMyBrowserMainForm.TreeView1Click(Sender: TObject);
begin
   if TreeView1.Selected.ImageIndex=8 then // collapsed Folder
    begin
      TreeView1.Selected.ImageIndex:=9;  // set image of expanded folder
      TreeView1.Selected.Expand(true);//expand
      TreeView1.Update;
      exit;
    end
  else
  if TreeView1.Selected.ImageIndex=9 then // expanded Folder
    begin
      TreeView1.Selected.ImageIndex:=8;
      TreeView1.Selected.Collapse(true);//collapse
      TreeView1.Update;
      exit;    
    end;
  //個々のURLデータのアイテム がクリックされた
  WebBrowser1.Navigate(xxx)
end;


にしの  2002-09-02 04:00:36  No: 1411

ShowBarsでなくて、ShowButtonsですよね?
Delphi5を使用していますが、ShowBarsプロパティは見あたりません。

+/-が表示されると言うことなので、ShowButtonsのこととして書きます。

> その時いつもルートフォルダが選択されてしまうのはどうしてですか?
イベントの定義は、OnClickのみでしょうか。
こちらでは、前回選択位置が選択されたままで、ルートに移動してしまうことはありません。

> +/-付きのクリックされたアイテムを正確に選択状態にする方法が分かりません。

開いた(Expandされた)ときに、そのノードをselectすればいいと思います。

procedure TForm1.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
begin
  Node.Selected := True;
end;

これだけです。

> また、ShowBars=False  にすれば各アイテムは選択状態になりますが、次のようなコードを書いてもビットイメージ切り替え結果がTreeView上に現れません。Updateなんて試してもだめですね。アドバイスをお願いいたします。

選択状態を、自前で切り替える理由はありますか?
もしなければ、TTreeNodeオブジェクトの、SelectedIndexプロパティを使用した方が早いです。
自前でやる場合も、(自前で描画するのでなければ)SelectedIndexプロパティを変更する必要があります。

IDEで、「項目の設定」でも、「選択時インデックス」というのがあると思います。


オン赤  2002-09-02 06:48:15  No: 1412

にしのさま、ありがとうございました。
しつれい、ShowButtons の間違えでした。はい、イベント定義はonClick だけです。WebBrowser.Nevigate(xxxx) するためだけです。

ご説明で:
<TTreeNodeオブジェクトの、SelectedIndexプロパティを使用した方が早いです。
とありますが、なぜTTreeNodeオブジェクトが必要になるのですか?SeletedIndex プロパティというのはTTreeview のどこにあるのですか?

すみません、全くのわからんちんで。。。


にしの  2002-09-02 08:05:50  No: 1413

TreeViewオブジェクトの持つ、Itemsオブジェクトは、TTreeNodesオブジェクトです。
TTreeNodesオブジェクトの持つ、Itemオブジェクトは、TTreeNodeオブジェクトです。
この辺は慣れですね。
VCLは、こういう構造が多いですから。
ヘルプで、どのプロパティがどういう働きをするのか確認して下さい。

(SelectedIndexを指定する例)
TreeView1.Items.Item[0].SelectedIndex := 1;
これは、下のようにも書けると思います。
TreeView1.Items[0].SelectedIndex := 1;


オン赤  2002-09-03 08:07:10  No: 1414

ありがとうございました。TTreeNode のこと理解できました。
お陰様でTreeView のクリックしたフォルダーがちゃんと選択されるようになりましたし、数回クリックし続ければ、フォルダーOpen のBitMapに変わってくれるようになりました。かなり僕のイメージに近くなってきました。
ありがとうございました。


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








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