PB TreeView 查找節(jié)點(轉(zhuǎn))
PowerBuilder提供的TreeView控件可以使我們以樹形方式分層組織和顯示數(shù)據(jù),,使程序的表現(xiàn)更為靈活,,用戶的操作更加方便,。通常情況下,,在TreeView控件中通過展開和折疊各分枝,可以方便地對所需信息進(jìn)行查找和定位,,但是如果該控件中的內(nèi)容層次較多,,用戶對其內(nèi)容又不非常了解時,要讓用戶逐一展開各分枝進(jìn)行定位就會使效率降低,這種情況下就需要提供一種自動查詢方式,,讓用戶輸入要找的信息,,由程序來完成在TreeView控件中的查找和定位。 PowerBuilder的TreeView控件沒有直接提供完成這一功能的函數(shù)或方法,,也就是說不能直接在TreeView控件的各節(jié)點中查找所需的數(shù)據(jù),。該控件具有一個FindItem()函數(shù),可用于查找節(jié)點項,,但該函數(shù)不能直接對我們所要找的數(shù)據(jù)進(jìn)行查找,,例如字符文本或數(shù)值數(shù)據(jù),它只能基于TreeView控件的某一節(jié)點項的句柄進(jìn)行查找,。不過我們可以利用該函數(shù)來獲得節(jié)點項的句柄,,再通過該句柄進(jìn)一步獲得節(jié)點項的詳細(xì)信息。FindItem() 函數(shù)的語法如下: treeviewname.FindItem ( navigationcode, itemhandle ) 其中,,treeviewname是我們要在其中進(jìn)行查找的TreeView控件的名稱,; RootTreeItem! 該函數(shù)返回一個長整形值,若執(zhí)行成功返回找到的節(jié)點的句柄,,若失敗則返回 -1,。除了ChildTreeItem!,F(xiàn)indItem不查找未展開的項,。利用FindItem只能獲得節(jié)點項的句柄,,要得到某一節(jié)點的詳細(xì)信息,還需要利用TreeView控件的GetItem()函數(shù),。該函數(shù)可通過節(jié)點項句柄得到節(jié)點項的狀態(tài)信息,,如label,、picture index、childen等,,只有比較這些狀態(tài)信息如label的值,,我們才能確定是否已經(jīng)找到所需的節(jié)點項。該函數(shù)如下所示: treeviewname.GetItem ( itemhandle, item) 其中,,treeviewname是TreeView控件的名稱;itemhandle 是要獲取信息的節(jié)點項的句柄,;item參數(shù)是一個TreeViewItem系統(tǒng)對象變量,,用于存放節(jié)點項的信息。 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) |
|