PB中TreeView控件使用技巧
2024-07-21 02:09:59
供稿:網(wǎng)友
pb中treeview控件使用技巧
powerbuilder中的treeview 控件為樹狀游覽,類似于windows的資源管理器,其特點(diǎn)是信息項(xiàng)呈樹狀層次結(jié)構(gòu),能更清晰地表現(xiàn)主、細(xì)目關(guān)系 ,操作非常方便。在應(yīng)用中可將其與datawindow 配合使用, 一個(gè)提供信息的分類體系,一個(gè)提供具體信息,達(dá)到珠連碧合的奇妙效果。它特別適用于多級(jí)信息的分類檢索, 是多級(jí)菜單所無法比似的,它的表現(xiàn)形式深受程序設(shè)計(jì)人員和廣大用戶的喜愛,在許多應(yīng)用軟件中都能看到她的英姿。
在powerbuilder下,treeview 控件的應(yīng)用較其它控件要復(fù)雜得多,剛接觸它時(shí)往往有些不知所措。但如果將它的機(jī)理搞清楚,掌握它也不是很難的事。下面我結(jié)合長白公司圖書分類檢索的實(shí)例,把treeview 控 件的使用方法和大家探討一下。
一、應(yīng)用treeview 控件的一般步驟
1、 建立一個(gè)應(yīng)用,并設(shè)好與數(shù)據(jù)庫的接口,這是操作數(shù)據(jù)庫的前提。
2、 在應(yīng)用中建一應(yīng)用窗口w_1,在其上加入二個(gè)名為dw_3和dw_4的datawindow控制對(duì)象和一個(gè)名為tv_1的treeview對(duì)象。
3、 修改dw_3屬性
general:把datawindow object name填寫一個(gè)已存在的名為dw_date的datawindow(注意:它與datawindow控制對(duì)象是不同的),用于生成樹視圖項(xiàng),將其visible項(xiàng)設(shè)為不可見。
4、 修改dw_4屬性
general:把datawindow object name填寫一個(gè)已存在的名為dw_ts的datawindow對(duì)象,用于顯示查詢出的具體內(nèi)容。
5、 編輯tv_1的屬性
treeview的樹視圖項(xiàng)不能直接編輯,必須在script中編寫程序。
picture:在picture name中加入四個(gè)不同的圖標(biāo),用于代表樹視圖中的兩個(gè)層次(一、二級(jí))、兩種狀態(tài)(未選、選中)。
general:可根據(jù)具體應(yīng)用設(shè)定是否選中,其中:
delete items:運(yùn)行中是否允許刪除表項(xiàng)。
disable pragdrog: 運(yùn)行中是否允許拖放表項(xiàng)。
edit labels: 運(yùn)行中是否允許單擊表項(xiàng)來改變表項(xiàng)的標(biāo)題。
show buttons:是否在表項(xiàng)放顯示+-按鈕,有示相對(duì)的擴(kuò)展和收縮。
hide selection:當(dāng)該控件失去焦點(diǎn)時(shí),選中項(xiàng)是否以高亮度顯示。
show line:表項(xiàng)間是否加一豎線。
lines at root:所有根層表項(xiàng)是否用豎線連接。
indentation:子表項(xiàng)相對(duì)于父表項(xiàng)的向右縮進(jìn)度。
6、 編寫tv_1的script
這里是treeview控件的關(guān)鍵,也是難點(diǎn)。
二、treeview 控件的信息構(gòu)成及創(chuàng)建
樹視圖項(xiàng)treeviewitem是treeview 控件的基本信息單位,樹視圖項(xiàng)的生成一般有二種方法,一種是先生成根層視圖項(xiàng),再在應(yīng)用中動(dòng)態(tài)生成下級(jí)視圖項(xiàng),另一種是把全部樹視圖項(xiàng)一次和成。兩種方法各有優(yōu)點(diǎn),請根據(jù)具體情況選用,本例中采用后一種方法。
1、 樹視圖項(xiàng)treeviewitem的主要屬性
label:string 型,樹視圖項(xiàng)的顯示信息。
data:any型,樹視圖項(xiàng)的內(nèi)部值。
level:integer型,樹視圖項(xiàng)在樹視圖中級(jí)別。
children:boolean 型,它決定該項(xiàng)是否有下一層(如圖中書名)。
pictureindex:integer 型,該項(xiàng)非選中時(shí)所用的圖標(biāo)在圖標(biāo)隊(duì)列中的編號(hào)。
selectedpictureindex:integer型,該項(xiàng)選中時(shí)所用的圖標(biāo)在圖標(biāo)隊(duì)列中的編號(hào)。
2、 生成treeviewitem項(xiàng)用到的函數(shù)
insertitemfirst():將加入項(xiàng)作為第一項(xiàng)
insertitemlast():將加入項(xiàng)作為最后一項(xiàng)
insertitem():將加入項(xiàng)插入到指定項(xiàng)的后面
insertitemsort():按順序放置。
3、 treeview的常用事件
constructor: 該事件在控件創(chuàng)建時(shí)觸發(fā),可在這里構(gòu)造treeviewitem。
click:單擊treeviewitem項(xiàng)時(shí),執(zhí)行查詢程序。
double click: 雙擊treeviewitem項(xiàng)時(shí),執(zhí)行查詢程序。
itempopulate 事件: 該事件在某treeviewitem項(xiàng)首次展開時(shí)觸發(fā), 觸發(fā)的同時(shí)系統(tǒng)會(huì)將 該treeviewitem項(xiàng)的句柄通過參數(shù)handle 傳遞過來。它主要用來生成對(duì)應(yīng)項(xiàng)的下層信息項(xiàng)。主要用于第一種方法。
三、 事件代碼
1、樹視圖控件tv_1的constructor事件代碼 wanqi 1999.6.28
integer li_rowcount,li_row
string li_current_dn,li_last_dn,li_current_ei,li_last_ei
//聲明二個(gè)樹視圖的實(shí)例變量
treeviewitem itvi_level_one,itvi_level_two
//long ii_h_l_one
//long ii_h_l_two
dw_3.settransobject(sqlca)//dw_3
為隱含的數(shù)據(jù)窗口,存有生成樹的數(shù)據(jù)
li_rowcount=dw_3.retrieve()//行數(shù)
dw_3.setsort("lb,pm")
dw_3.sort()
//生成樹視圖的各級(jí)樹視圖項(xiàng)
for li_row=1 to li_rowcount
li_current_dn=dw_3.object.lb[li_row]
//dw_3對(duì)象中"lb類別"
li_current_ei=dw_3.object.pm[li_row]
//dw_3對(duì)象中"pm品名"
if isnull (li_current_ei) then
li_current_ei=""
end if
if li_current_dn< >li_last_dn then
//if lb不與一級(jí)視圖項(xiàng)重復(fù)
//設(shè)置一級(jí)樹視圖項(xiàng)
itvi_level_one.label=dw_3.object.lb[li_row]
//視圖項(xiàng)的顯示信息
itvi_level_one.level=1 //級(jí)別
itvi_level_one.data=li_current_dn
//視圖項(xiàng)的內(nèi)部信息
itvi_level_one.pictureindex=1
//沒選中時(shí)所用的圖標(biāo)序號(hào)
itvi_level_one.selectedpictureindex=3
//選中時(shí)使用的圖標(biāo)序號(hào)
itvi_level_one.children=(li_current_ei< >' ')
//樹視圖是否有下一級(jí)
ii_h_l_one=this.insertitemlast(0,itvi_level_one)
//將項(xiàng)加入到一級(jí)樹的最后一項(xiàng)
end if
//設(shè)置二級(jí)樹視圖項(xiàng)
if li_current_dn< >li_last_ei then
if li_current_ei<>' ' then
itvi_level_two.label=dw_3.object.pm[li_row]
itvi_level_two.level=2
itvi_level_two.data=li_current_dn
itvi_level_two.pictureindex=2
itvi_level_two.selectedpictureindex=4
itvi_level_two.data=li_current_ei
itvi_level_two.children=false
ii_h_l_two=this.insertitemlast
(ii_h_l_one,itvi_level_two)
//將項(xiàng)加入到二級(jí)樹的最后一項(xiàng)
end if
end if
li_last_dn=li_current_dn//設(shè)比較項(xiàng)
li_last_ei=li_current_ei
next
2、tv_1控件的clicked事件代碼
string s1
treeviewitem ii
this.getitem(handle,ii)
s1=string(ii.label)
choose case ii.level
case 1
//過濾類別
dw_4.setfilter("lb='"+s1+"'")
dw_4.filter()
case 2
dw_4.setfilter("pm='"+s1+"'")
dw_4.filter()
//過濾書名
end choose
本文來源于網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。