麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 技術開發 > 正文

為PB的TreeView實現同步選擇

2023-06-15 12:14:59
字體:
來源:轉載
供稿:網友

TreeView是Powerbuilder中非常重要的一個控件,在很多地方使用起來非常方便,但同步選擇問題困擾了很多人,本文就給出了實現TreeView控件同步選擇的一個方法。

TreeView控件能夠清晰地表示層次關系,因而贏得了眾多程序員的喜愛。在TreeView編程中,常見的一個問題是同步選擇(即選擇一個節點時,同時選擇該節點的所有子節點;不選一個節點,同時去除該節點的祖先節點選擇標志)。

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

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

(1)為TreeView控件添加一個用戶事件ue_synchronizechildren(long handle, integer state),代碼如下:

long childitem

treeviewitem tvitem

getitem(handle, tvitem)

tvitem.statepictureindex=state

setitem(handle, tvitem)

childitem=this.finditem(ChildTreeItem!, handle)

do while(childitem<>-1)

    this.Event ue_synchronizechildren(childitem, state) //遞歸遍歷后代結點

    childitem=this.finditem(NextTreeItem!, childitem)

loop

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

long parentitem

treeviewitem tvitem

getitem(handle, tvitem)

tvitem.statepictureindex=state

setitem(handle, tvitem)

parentitem=this.finditem(ParentTreeItem!, handle)

if parentitem<>-1 then

this.Event ue_synchronizeparent(parentitem, state)

      end if

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

treeviewitem tvitem

getitem(handle, tvitem)

if tvitem.statepictureindex=prevstate then

  return

else

  this.Event ue_synchronizechildren(handle, tvitem.statepictureindex)

    if tvitem.statepictureindex=1 then //如需實現文末提及的功能,可在此處添加代碼。

           this.Event ue_synchronizeparent(handle, tvitem.statepictureindex)

    end if

end if

(3)在Clicked事件中,添加如下調用:

treeviewitem tvitem

getitem(handle, tvitem)

post event ue_statechanged(handle, tvitem.statepictureindex)

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产做爰| 干色视频 | 法国性经典xxxhd | av电影网站在线 | 国产免费观看电影网站 | av久草 | 91成人久久 | 毛片在线免费观看网址 | 亚洲一级片在线观看 | 成人午夜在线免费观看 | 韩日黄色片 | v11av在线播放 | 蜜桃91丨九色丨蝌蚪91桃色 | 欧美日韩一 | 久久精品2019中文字幕 | 亚洲一区二区在线视频 | 他也色在线视频 | 久久久成人精品 | 黄色免费小网站 | 毛片在线看免费 | av免费在线免费观看 | 激情国产视频 | 国产日韩三区 | 久久精品之| 久久久久久久久久久高潮一区二区 | 欧美成人免费 | 嫩呦国产一区二区三区av | av电影观看 | 韩国美女一区 | 91专区在线观看 | 欧美成年人在线视频 | 亚洲第一页综合 | 国产一区免费在线 | 男男羞羞视频网站国产 | 美国av在线免费观看 | 免费99热在线观看 | 女人解衣喂奶电影 | 久久久久久久免费看 | 偿还电影免费看 | 国产喷白浆10p | 干色视频 |