1. 程式人生 > >終於解決了TTreeView中Node更換圖片的問題(Delphi)

終於解決了TTreeView中Node更換圖片的問題(Delphi)

Delphi的環境真的是有些難用。
TTreeView控制元件顯示節點圖片的時候,各種情況處理的方法不一致,如果點選節點,其有下級節點的時候,很好處理,就只需要在其OnExpended事件和OnCollapsed事件中,判斷當前Node的ImageIndex然後進行更改處理就OK了,但是有一點,在載入樹型選單的時候,一定要給每個節點設定初始的節點圖片,如:
    Node.ImageIndex := 1;
    Node.SelectedIndex := 1;
然後在OnExpended事件和OnCollapsed事件中進行處理,如:
  //設定節點圖示狀態
  if Node.ImageIndex = 1 then

  begin
    Node.ImageIndex := 0;
    Node.SelectedIndex := 0;
  end;
在此自己隨意判斷處理就OK了。

但是如果TTreeView控制元件沒有展開節點,當然也就沒有收縮了,每個節點都是根節點。那麼以上兩個事件就不起作用了。就只能是在OnClick事件中進行圖片的更換問題,可是在Click事件中寫好程式碼之後,問題又出現了,在點選節點時,第一次不會改變圖片,當第二次點選的時候,才會改變狀態,好像每個節點要啟用一樣。
想了想,可能是因為節點還不知道另一種圖片的狀態,然後就在樹型選單載入的時候,把所有的圖片都給節點設定了一次,最後設定成初始圖片,誤打誤撞的,問題就這樣解決了,害得我調了半天!!!

我在載入樹型選單時這樣寫:
        //設定樹型選單目錄圖示
        ATreeNode.ImageIndex := 1;
        ATreeNode.SelectedIndex := 1;
        ATreeNode.ImageIndex := 0;
        ATreeNode.SelectedIndex := 0;
總之,把節點有的狀態都載入了一遍,最後設定成初始狀態。
在Click事件中這樣寫:
    CurTreeNode := tvTest.Selected;    
    if CurTreeNode <> OldTreeNode then//判斷當前節點是否是前一節點

    begin
      OldTreeNode.ImageIndex := 0;
      OldTreeNode.SelectedIndex := 0; //設定前一選中節點圖片  

      CurTreeNode.ImageIndex := 1;
      CurTreeNode.SelectedIndex := 1; //設定當前選中節點圖片

      OldTreeNode := CurTreeNode;//將當前節點設定成前一節點
    end;
這樣點選就正常了。