powerbuilder treeview 節點查找 handle 問題

  本想通過handle值去定位treeview 的,發現刪除或增加節點, handle值是變化的,故改用查找結點的方式去獲取handle值

long ll_tvi,ll_tvnext
ll_tvi = tv_1.FindItem(RootTreeItem!,0)

ll_tvnext = tv_1.FindItem(childtreeitem!,ll_tvi)


PowerBuilder提供的TreeView控件可以使我們以樹形方式分層組織和顯示數據,使程序的表現更爲靈活,用戶的操作更加方便。通常情況下,在TreeView控件中通過展開和摺疊各分枝,可以方便地對所需信息進行查找和定位,但是如果該控件中的內容層次較多,用戶對其內容又不非常瞭解時,要讓用戶逐一展開各分枝進行定位就會使效率降低,這種情況下就需要提供一種自動查詢方式,讓用戶輸入要找的信息,由程序來完成在TreeView控件中的查找和定位。 

    PowerBuilder的TreeView控件沒有直接提供完成這一功能的函數或方法,也就是說不能直接在TreeView控件的各節點中查找所需的數據。該控件具有一個FindItem()函數,可用於查找節點項,但該函數不能直接對我們所要找的數據進行查找,例如字符文本或數值數據,它只能基於TreeView控件的某一節點項的句柄進行查找。不過我們可以利用該函數來獲得節點項的句柄,再通過該句柄進一步獲得節點項的詳細信息。FindItem() 函數的語法如下: 

treeviewname.FindItem ( navigationcode, itemhandle )

    其中,treeviewname是我們要在其中進行查找的TreeView控件的名稱; 
    navigationcode參數是一個TreeNavigation枚舉數據類型,用來表明itemhandle參數與要找的節點項之間的關係,有效的取值如下: 

RootTreeItem! 
查找第一層的第一項;
NextTreeItem! 
在同一級中查找itemhandle後的下一項;
PreviousTreeItem! 
在同一級中查找itemhandle前面的一項;
ParentTreeItem!
查找itemhandle的父節點;
ChildTreeItem! 
查找itemhandle的第一個子節點;
FirstVisibleTreeItem! 
查找在TreeView控件中可視的第一項而不論層次;
NextVisibleTreeItem!
查找itemhandle後已展開的第一項,不分層次;
PreviousVisibleTreeItem! 
查找itemhandle前已展開的第一項,不分層次;
CurrentTreeItem! 獲得當前所選項;
DropHighlightTreeItem! 
查找DropHighlighted屬性最近被設置過的項。
Itemhandle參數表示節點項的句柄。

    該函數返回一個長整形值,若執行成功返回找到的節點的句柄,若失敗則返回 -1。除了ChildTreeItem!,FindItem不查找未展開的項。利用FindItem只能獲得節點項的句柄,要得到某一節點的詳細信息,還需要利用TreeView控件的GetItem()函數。該函數可通過節點項句柄得到節點項的狀態信息,如label、picture index、childen等,只有比較這些狀態信息如label的值,我們才能確定是否已經找到所需的節點項。該函數如下所示: 

treeviewname.GetItem ( itemhandle, item)

    其中,treeviewname是TreeView控件的名稱;itemhandle 是要獲取信息的節點項的句柄;item參數是一個TreeViewItem系統對象變量,用於存放節點項的信息。 
setpointer(hourglass!)

long ll_handle

 long ll_handletree[]

long ll_level

int li_find

treeviewitem ltvi_1

li_find = 0

tv_treeview.setredraw(false)

ll_handle = tv_treeview.finditem(RootTreeItem! ,0)

//tv_treeview.expandall(ll_handle) tv_treeview.expandItem(ll_handle)

do while ll_handle >0 tv_treeview.getitem(ll_handle,ltvi_1)

 if ltvi_1.label = sle_content.text then

li_find = 1

exit

 end if

ll_handle = tv_treeview.finditem(NextVisibleTreeItem! ,ll_handle) // tv_treeview.expandall(ll_handle) tv_treeview.expandItem(ll_handle)

 loop

ll_level=1

if ll_handle > 0 then

ll_handletree[ll_level]=ll_handle

ll_handle=tv_treeview.finditem(ParentTreeItem! ,ll_handle)

do while ll_handle > 0

 ll_level ++

ll_handletree[ll_level]=ll_handle

ll_handle=tv_treeview.finditem(ParentTreeItem! ,ll_handle)

 loop end if

ll_handle = tv_treeview.finditem(RootTreeItem! ,0)

do while ll_handle > 0

 tv_treeview.CollapseItem(ll_handle)

 ll_handle = tv_treeview.finditem(NextTreeItem! ,ll_handle)

loop

do while ll_level > 0 and li_find = 1

 tv_treeview.expanditem(ll_handletree[ll_level])

if ll_level = 1 then

 tv_treeview.selectitem(ll_handletree[ll_level])

tv_treeview.setfocus()

exit

else ll_level -- end if loop

tv_treeview.setredraw(true)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章