PB中TreeView控制項使用技巧

2021-08-21 22:49:05 字數 4271 閱讀 3315

powerbuilder中的treeview 控制項為樹狀遊覽,類似於windows的資源管理器,其特點是資訊項呈樹狀層次結構,能更清晰地表現主、細目關係 ,操作非常方便。在應用中可將其與datawindow 配合使用, 乙個提供資訊的分類體系,乙個提供具體資訊,達到珠連碧合的奇妙效果。它特別適用於多級資訊的分類檢索, 是多級選單所無法比似的,它的表現形式深受程式設計人員和廣大使用者的喜愛,在許多應用軟體中都能看到她的英姿。

在powerbuilder下,treeview 控制項的應用較其它控制項要複雜得多,剛接觸它時往往有些不知所措。但如果將它的機理搞清楚,掌握它也不是很難的事。下面我結合長白公司圖書分類檢索的例項,把treeview 控 件的使用方法和大家**一下。

一、應用treeview 控制項的一般步驟

1、 建立乙個應用,並設好與資料庫的介面,這是運算元據庫的前提。

2、 在應用中建一應用視窗w_1,在其上加入二個名為dw_3和dw_4的datawindow控制物件和乙個名為tv_1的treeview物件。

3、 修改dw_3屬性

general:把datawindow object name填寫乙個已存在的名為dw_date的datawindow(注意:它與datawindow控制物件是不同的),用於生成樹檢視項,將其visible項設為不可見。

4、 修改dw_4屬性

general:把datawindow object name填寫乙個已存在的名為dw_ts的datawindow物件,用於顯示查詢出的具體內容。

5、 編輯tv_1的屬性

treeview的樹檢視項不能直接編輯,必須在script中編寫程式。

picture:在picture name中加入四個不同的圖示,用於代表樹檢視中的兩個層次(一、二級)、兩種狀態(未選、選中)。

general:可根據具體應用設定是否選中,其中:

delete items:執行中是否允許刪除表項。

disable pragdrog: 執行中是否允許拖放表項。

edit labels: 執行中是否允許單擊表項來改變表項的標題。

show buttons:是否在表項放顯示+-按鈕,有示相對的擴充套件和收縮。

hide selection:當該控制項失去焦點時,選中項是否以高亮度顯示。

show line:表項間是否加一豎線。

lines at root:所有根層表項是否用豎線連線。

indentation:子表項相對于父表項的向右縮進度。

6、 編寫tv_1的script

這裡是treeview控制項的關鍵,也是難點。

二、treeview 控制項的資訊構成及建立

樹檢視項treeviewitem是treeview 控制項的基本資訊單位,樹檢視項的生成一般有二種方法,一種是先生成根層檢視項,再在應用中動態生成下級檢視項,另一種是把全部樹檢視項一次和成。兩種方法各有優點,請根據具體情況選用,本例中採用後一種方法。

1、 樹檢視項treeviewitem的主要屬性

label:string 型,樹檢視項的顯示資訊。

data:any型,樹檢視項的內部值。

level:integer型,樹檢視項在樹檢視中級別。

pictureindex:integer 型,該項非選中時所用的圖示在圖示佇列中的編號。

selectedpictureindex:integer型,該項選中時所用的圖示在圖示佇列中的編號。

2、 生成treeviewitem項用到的函式

insertitemfirst():將加入項作為第一項

insertitemlast():將加入項作為最後一項

insertitem():將加入項插入到指定項的後面

insertitemsort():按順序放置。

3、 treeview的常用事件

constructor: 該事件在控制項建立時觸發,可在這裡構造treeviewitem。

click:單擊treeviewitem項時,執行查詢程式。

double click: 雙擊treeviewitem項時,執行查詢程式。

itempopulate 事件: 該事件在某treeviewitem項首次展開時觸發, 觸發的同時系統會將 該treeviewitem項的控制代碼通過引數handle 傳遞過來。它主要用來生成對應項的下層資訊項。主要用於第一種方法。

三、 事件**

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

//宣告二個樹檢視的例項變數

treeviewitem itvi_level_one,itvi_level_two

//long ii_h_l_one

//long ii_h_l_two

dw_3.settransobject(sqlca)//dw_3

為隱含的資料視窗,存有生成樹的資料

li_rowcount=dw_3.retrieve()//行數

dw_3.setsort("lb,pm")

dw_3.sort()

//生成樹檢視的各級樹檢視項

for li_row=1 to li_rowcount

li_current_dn=dw_3.object.lb[li_row]

//dw_3物件中"lb類別"

li_current_ei=dw_3.object.pm[li_row]

//dw_3物件中"pm品名"

if isnull (li_current_ei) then

li_current_ei=""

end if

if li_current_dn< >li_last_dn then

//if lb不與一級檢視項重複

//設定一級樹檢視項

itvi_level_one.label=dw_3.object.lb[li_row]

//檢視項的顯示資訊

itvi_level_one.level=1 //級別

itvi_level_one.data=li_current_dn

//檢視項的內部資訊

itvi_level_one.pictureindex=1

//沒選中時所用的圖示序號

itvi_level_one.selectedpictureindex=3

//選中時使用的圖示序號

itvi_level_one.children=(li_current_ei< >' ')

//樹檢視是否有下一級

ii_h_l_one=this.insertitemlast(0,itvi_level_one)

//將項加入到一級樹的最後一項

end if

//設定二級樹檢視項

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)

//將項加入到二級樹的最後一項

end if

end if

li_last_dn=li_current_dn//設比較項

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

PB中TreeView控制項使用技巧

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!powerbuilder中的treeview 控制項為樹狀遊覽,類似於windows的資源管理器,其特點是資訊項呈樹狀層次結構,能更清晰地表現主 細目關係 操作非常方便。在應用中可將其與datawindow 配合使用,乙個提供資訊的分類體系,乙個提...

使用WinFrom控制項 TreeView

使用winfrom控制項 treeview 為了後續課程的學習,今天老師講了乙個新的控制項 treeview,說實話,上課真的沒聽明白,回家看了一晚上才弄懂,哎,我太愚鈍了.定義乙個 treeview控制項命名為tv private void frmtreeview load object send...

TreeView控制項的使用

treeview.nodes.add 新增節點的字串 treeview.selectednode.nodes.add 新增字串 treeview.selectednode.remove treeview控制項使用 在產品類別管理,部門管理等樹狀多級選單中的應用,主要把樹控制項中資料表儲存到sql資料...