標籤:

在vfp5.0中使用 treeview控制項

在vfp5.0中使用 treeview控制項 黃明   當資料庫中保存的數據之間具有層次隸屬關係時(如表示各種社會組織結構的數據),就要用到能以樹型結構顯示並操作這類數據的控制項:treeview。  treeview是windows95/98下的activex控制項,包含在comctl32.ocx中,當安裝了vfp5.0或vb5.0專業版中的activex後,可以在windows的system子目錄下找到。  下面通過一個簡單的例子介紹如何在vfp中方便地使用treeview。  先建立一個表,用來表示圖1所示的結構。表結構及數據如表1。  單位代碼欄位按路徑代碼法編碼,其中包含著資料庫中各記錄對應節點在樹中的位置信息(也即保存著各記錄之間的層次隸屬關係)。這種代碼能表示出從根節點到指定節點的整個路徑。圖1所示為一個三層結構,圖中的數字即是相應單位的路徑代碼。  現在創建一個新表單,把tree.dbf添加到表單的數據環境中。添加treeview控制項,添加方法:在表單控制項工具欄中選擇ole容器控制項,添加到表單中,出現insert object對話框後,選insert control,在列表框里選microsoft treeview control。  給表單添加一個新方法:myparentnode用於獲得樹中某節點父節點的鍵值。  parameters nodecode  if right(nodecode,1)=′0′  return ′000′  else  return left(nodecode,2)+′0′  endif  在treeview的init事件里加入下面的程序,用tree.dbf中的記錄填充treeview:  select tree  go top  this.nodes.add(,,′k′+tree.單位代碼,rtrim(tree.單位名稱))  skip  do while .not. eof()  this.nodes.add(′k′+thisform.myparentnode(tree.單位代碼),4,′k′+tree.單位代碼,rtrim(tree.單位名稱))skip  endd  go top  程序中add是nodes的方法,與列表框的additem方法類似,用於向treeview中添加節點。  為了實現treeview控制項的導航功能(操縱資料庫),需要在treeview的nodeclick事件中加入下面的程序:  lparameters node  select tree  go top  locate for tree.單位代碼==substr(node.key,2)  thisform.refresh  在表單中添加一個編輯框,設置controlsource=′tree.概況′  現在運行表單,展開所有非葉節點,可以看到treeview已經按圖1所示的層次關係顯示出了表tree.dbf中的記錄。單擊treeview各節點,編輯框中的內容隨著不同的節點而改變,說明上面的程序已使treeview具備了導航功能。  為了讓讀者能更好地在vfp中使用treeview控制項,這裡再介紹幾點使用技巧和注意事項。  在vfp中使用treeview時,應充分利用node的key屬性。可以為節點指定有意義的字元串作為它的key值,這正是存放路徑代碼的好地方。但要注意,不能用純數字字元串作為node的key屬性的值。否則treeview將產生無效鍵值錯誤。因此,上面的程序中在引用key屬性的地方都合併了一個字元「k」。  當樹中的節點比較多時,應對各節點排序,以方便用戶檢索。方法是設置各節點的sorted屬性為真。  編程時,還可以利用treeview的imagelist屬性和node的image屬性為性質不同的節點指定不同的圖標,美化用戶界面。如在上面的例子中,向表單里添加一個imagelist控制項(方法同添加treeview),在其屬性對話框里插入四個圖標,設置各圖標的key屬性分別為:root、open、close、leaf。在上述treeview的init事件里追加下面的代碼:  this.imagelist=thisform.oleimage.object  this.nodes(1).image=′root′  for imagelist=2 to this.nodes.countif this.nodes(imagelist).children>0this.nodes(imagelist).image=′close′this.nodes(imagelist).expandedimage=′open′elsethis.nodes(imagelist).image=′leaf′endi  endf  與在vb中使用imagelist不同,當向vfp表單加入一個imagelist後,在設計狀態下,並不能直接設置treeview的imagelist屬性。解決的辦法是在程序中指定treeview的imagelist屬性,並應設置為包容imagelist的ole容器控制項的object。

表1 表名為tree.dbf
單位名稱(字元型,長度20) 單位代碼(字元型,長度3) 概況(備註型)
總公司 000 memo
分公司1 010 memo
人事部 011 memo
開發部 012 memo
生產部 013 memo
分公司2 020 memo
人事部 021 memo
經營部 022 memo

  圖1 某公司的組織結構
推薦閱讀:

WPF控制項簡單總結(轉載)
C# 控制項縮寫大全+命名規範+示例
第三章常用的控制項和屬性
C#中利用LightningChart繪製曲線(及LightningChart介紹)

TAG:控制 | 控制項 |