六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

為PB的TreeView完成同步選擇

[摘要]廣州中山大學(xué)信息管理系2001級(jí) 梁冠超(510275)TreeView控件能夠清晰地表示層次關(guān)系,因而贏得了眾多程序員的喜愛。在TreeView編程中,常見的一個(gè)問題是同步選擇(即選擇一個(gè)節(jié)點(diǎn)時(shí),同時(shí)選擇該節(jié)點(diǎn)的所有子節(jié)點(diǎn);不選一個(gè)節(jié)點(diǎn),同時(shí)去除該節(jié)點(diǎn)的祖先節(jié)點(diǎn)選擇標(biāo)志)。要實(shí)現(xiàn)這種效果,本來不...
廣州中山大學(xué)信息管理系2001級(jí) 梁冠超(510275)

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

要實(shí)現(xiàn)這種效果,本來不難,只需要在檢測(cè)到節(jié)點(diǎn)選擇狀態(tài)變化時(shí),遍歷節(jié)點(diǎn)的祖先或者后代節(jié)點(diǎn)進(jìn)行同步即可。但是PB并沒有提供檢測(cè)節(jié)點(diǎn)選擇狀態(tài)變化的事件。怎么辦呢?

讓我們來看看PB中TreeView節(jié)點(diǎn)選擇狀態(tài)的表示。當(dāng)TreeView的CheckBoxes屬性為True時(shí),每個(gè)節(jié)點(diǎn)包含一個(gè)復(fù)選框。選中復(fù)選框時(shí),StatePictureIndex屬性為2,未選中則為1。當(dāng)選擇某個(gè)節(jié)點(diǎn)時(shí),首先觸發(fā)TreeView的Clicked事件,處理完Clicked事件后再對(duì)StatePictureIndex進(jìn)行設(shè)置。顯然,如果我們能夠?qū)licked事件前后節(jié)點(diǎn)的StatePictureIndex屬性值進(jìn)行比較,我們就可以判斷節(jié)點(diǎn)的選擇狀態(tài)是否發(fā)生了變化。按照這個(gè)思路,疏理PB的事件模型,發(fā)現(xiàn)采用Post的調(diào)用事件方法,可以實(shí)現(xiàn)將一個(gè)事件加入控件消息序列,在處理完當(dāng)前事件后再對(duì)新加入的事件進(jìn)行處理。至此,我們得到了如下的解決方案:

1.       為TreeView控件添加一個(gè)用戶事件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) //遞歸遍歷后代結(jié)點(diǎn)

    childitem=this.finditem(NextTreeItem!, childitem)

loop

添加一個(gè)用戶事件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.       添加一個(gè)用戶事件ue_statechanged(long handle, integer prevstate)檢測(cè)節(jié)點(diǎn)的選擇狀態(tài), 如果發(fā)生了變化則調(diào)用ue_synchronizechildren同步后代節(jié)點(diǎn),并根據(jù)需要通過ue_synchronizeparent同步祖先節(jié)點(diǎn)。代碼如下:

treeviewitem tvitem

getitem(handle, tvitem)

if tvitem.statepictureindex=prevstate then

  return

else

  this.Event ue_synchronizechildren(handle, tvitem.statepictureindex)

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

           this.Event ue_synchronizeparent(handle, tvitem.statepictureindex)

    end if

end if





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

treeviewitem tvitem

getitem(handle, tvitem)

post event ue_statechanged(handle, tvitem.statepictureindex)

       為了簡(jiǎn)單起見,上面的代碼并沒有考慮當(dāng)選上一個(gè)結(jié)點(diǎn)時(shí),它的所有兄弟已被選擇,因此父結(jié)點(diǎn)也應(yīng)該被選擇的情況,如有需要,請(qǐng)讀者自己完成。


主站蜘蛛池模板: 日本免费网 | 一级做a免费观看大全 | 日韩一区二区久久久久久 | 伊人五月婷 | 一区二区三区在线免费视频 | 午夜精品福利视频 | 午夜综合 | 午夜激情影视 | 亚洲欧洲尹人香蕉综合 | 青青青久久久 | 天天做人人爱夜夜爽2020 | 四虎影视站长工具 | 色视频综合 | 探花系列| 日本成人网址 | 日本不卡视频在线视频观看 | 色吧亚洲欧美另类 | 婷婷日日夜夜 | 亚洲伊人久久大香线蕉啊 | 新男人天堂| 婷婷成人丁香五月综合激情 | 欧美在线免费观看视频 | 最近中文字幕无免费视频 | 殴美在线 | 欧洲亚洲综合一区二区三区 | 色综合网天天综合色中文男男 | 青青国产在线视频 | 欧美一区福利 | 天堂网www在线资源链接 | 一区二区视频网 | 日韩爱爱 | 一区二区免费 | 日日干日日爽 | 色站app | 中文国产日韩欧美视频 | 人人揉人人添人人捏人人看 | 午夜啪啪免费视频 | 日韩a级毛片免费观看 | 四虎影院久久久 | 亚洲 中文 欧美 日韩 在线 | 亚洲综合图区 |