熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PB編程 >> 正文

為PB的TreeView實現同步選擇

2022-06-13   來源: PB編程 

  TreeView控件能夠清晰地表示層次關系在TreeView編程中常見的一個問題是同步選擇(即選擇一個節點時同時選擇該節點的所有子節點不選一個節點同時去除該節點的祖先節點選擇標志)

  要實現這種效果本來不難只需要在檢測到節點選擇狀態變化時遍歷節點的祖先或者後代節點進行同步即可但是PB並沒有提供檢測節點選擇狀態變化的事件

  讓我們來看看PB中TreeView節點選擇狀態的表示當TreeView的CheckBoxes屬性為True時每個節點包含一個復選框選中復選框時StatePictureIndex屬性為未選中則為當選擇某個節點時首先觸發TreeView的Clicked事件處理完Clicked事件後再對StatePictureIndex進行設置顯然如果我們能夠將Clicked事件前後節點的StatePictureIndex屬性值進行比較我們就可以判斷節點的選擇狀態是否發生了變化按照這個思路疏理PB的事件模型發現采用Post的調用事件方法可以實現將一個事件加入控件消息序列在處理完當前事件後再對新加入的事件進行處理

  至此我們得到了如下的解決方案

    為TreeView控件添加一個用戶事件ue_synchronizechildren(long handle integer state)

  代碼如下

  long childitem

  treeviewitem tvitem

  getitem(handle tvitem)

  tvitemstatepictureindex=state

  setitem(handle tvitem)

  childitem=thisfinditem(ChildTreeItem! handle)

  do while(childitem<>

  thisEvent ue_synchronizechildren(childitem state) //遞歸遍歷後代結點

  childitem=thisfinditem(NextTreeItem! childitem)

  loop

  添加一個用戶事件ue_synchronizeparent(long handle integer state)如下

  long parentitem

  treeviewitem tvitem

  getitem(handle tvitem)

  tvitemstatepictureindex=state

  setitem(handle tvitem)

  parentitem=thisfinditem(ParentTreeItem! handle)

  if parentitem<> then

  thisEvent ue_synchronizeparent(parentitem state)

  end if

    添加一個用戶事件ue_statechanged(long handle integer prevstate)檢測節點的選擇狀態 如果發生了變化則調用ue_synchronizechildren同步後代節點並根據需要通過ue_synchronizeparent同步祖先節點

  代碼如下

  treeviewitem tvitem

  getitem(handle tvitem)

  if tvitemstatepictureindex=prevstate then

  return

  else

  thisEvent ue_synchronizechildren(handle tvitemstatepictureindex)

  if tvitemstatepictureindex= then //如需實現文末提及的功能可在此處添加代碼

  thisEvent ue_synchronizeparent(handle tvitemstatepictureindex)

  end if

  end if

    在Clicked事件中添加如下調用

  treeviewitem tvitem

  getitem(handle tvitem)

  post event ue_statechanged(handle tvitemstatepictureindex)

  為了簡單起見上面的代碼並沒有考慮當選上一個結點時它的所有兄弟已被選擇因此父結點也應該被選擇的情況如有需要請讀者自己完成


From:http://tw.wingwit.com/Article/program/PB/201311/24640.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.