在vfp5.0中使用 treeview控制項
07-10
在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。
單位名稱(字元型,長度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介紹)