本想通過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)