kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件
學習資源:《Excel VBA從入門到進階》第60集 by蘭色幻想
本節講Treeview控件。
TreeView控件是以樹形結構顯示數據的控件。利用TreeView控件,可以設計出樹形結構圖,便于用戶選擇不同的項目。
總公司人事結構是一級節點,公司一、公司二、公司三是二級節點,部門是三級節點,人員是四級節點首先需要把treeview控件添加到工具箱,依舊在工具箱,右鍵附加控件,找到Microsoft TreeView Control,確定,就可以在工具箱找到它了。
一、數據導入
treeview是由節點構成的,第一個節點叫頂級節點,其余的是子節點。
例:把以下公司結構表做成Treeview。
可以看到已經把各級別標記為不同顏色,代碼也是遞進有層次感的,可以單從員工的代碼看出他所屬的公司和部門。下面以一個結構圖展示節點分布:
代碼思路講解:
TreeView1.Nodes.Add(relative, relationship, key, text, image)
注意:
① 節點對象:Nodes
② 如果一級節點的索引值和創建節點的位置為空的話,則表示創建是的頂級節點。
③ 節點的索引值不能是純數字。
④ 子節點的表示:tvwChild。
⑤ 選取節點時的圖標可選,前四個參數必須。
套到例子里,寫創建頂級節點的語句:
Set Nodx = TreeView1.Nodes.Add(, , "總公司", "總公司人事結構", 1)①上一級節點的索引值:因為是頂級節點,所以沒有上一級節點的索引值,略過不填
②是否為子節點:頂級節點不是子節點,略過不填(不填內容也要寫逗號啊)
③節點的索引值:設置為"總公司"
④節點上顯示的文字:"總公司人事結構"
⑤選取節點時的圖標:1(上節內容imagelist,因為有圖標,所以記得也要在窗體插入imagelist控件)。
**假設不設置選取節點時的圖標,代碼可寫為:
Set Nodx = TreeView1.Nodes.Add(, , "總公司", "總公司人事結構")最后的逗號可不寫,因為這項參數是可選的。
寫創建子節點(公司一)的語句:
Set Nodx = TreeView1.Nodes.Add("總公司", tvwChild, "A" & C2, C1 & "(" & C2 & ")", 2)①上一級節點的索引值:“總公司”。
②是否為子節點:是,所以填tvwChild。
③節點的索引值:因為不能是純數字,為方便記憶,把表格中的代碼賦值給C2,寫成 "A" & C2。以公司一為例,那么它的索引值就是“A1”。
④節點上顯示的文字:C1 & "(" & C2 & ")",把表格中的級別賦值給C1。以公司一為例,那么它將會顯示為“公司一(1)”。
⑤選取節點時的圖標:2(imagelist控件的序號2圖片)。
2. 代碼邏輯
①要顯示圖標,所以先要配置好lmagelist控件。
②循環語句,循環獲取級別和代碼。
③判斷語句,根據代碼判斷并生成對應級別的節點。
完整代碼:
Private Sub UserForm_Initialize()Dim Nodx As nodeTreeView1.ImageList = ImageList1 '從imagelist控件中提取圖片 Set Nodx = TreeView1.Nodes.Add(, , "總公司", "總公司人事結構", 1) '總公司是頂級節點的索引值,For x = 2 To Range("B65536").End(xlUp).RowC1 = Cells(x, 1)C2 = Cells(x, 2)If Len(C2) = 1 Then '如果代碼長度為1,說明是頂級節點下的二級節點Set Nodx = TreeView1.Nodes.Add("總公司", tvwChild, "A" & C2, C1 & "(" & C2 & ")", 2)ElseIf Len(C2) = 3 Then '如果代碼長度為3,說明是三級節點Set Nodx = TreeView1.Nodes.Add("A" & Left(C2, 1), tvwChild, "A" & C2, C1 & "(" & C2 & ")", 3)ElseIf Len(Cells(x, 2)) = 6 Then '如果代碼長度為6,說明是四級節點Set Nodx = TreeView1.Nodes.Add("A" & Left(C2, 3), tvwChild, "A" & C2, C1 & "(" & C2 & ")", 4)End IfNextEnd Sub運行演示:
二、數據讀取
有數據導入,就有數據讀取。如何讓程序識別到我們點擊了哪個節點呢?
還是接上例,想達到如下效果:
從圖中可以看到,每點擊一個節點,旁邊的文本框都會顯示它的信息。
代碼思路講解:
SelectedItem.Key 正在選取節點的索引值
2. 節點包含的信息,第一個信息是它的索引值,剛剛除了頂級節點的索引值特別設置為“總公司”,其他索引值都是“A代碼”,代碼長度不一。第二個信息是它顯示出來的內容text,除了頂級節點特別設置為“總公司人事結構”,其他都是“級別名(代碼)”。
所以我們需要根據代碼長度判斷,它所在的級別,使用判斷語句。
①如果代碼長度為2,表明它是二級節點,公司名稱就是節點的text(注意去除后面的“(代碼)”,部門和姓名沒有,代碼是去除首字母的索引值。
②如果代碼長度為4,表明它是三級節點,公司名稱是它的上一節點的text,部門是當前節點的text,姓名沒有,代碼是去除首字母的索引值。
上一節點 Nodes.Parent②如果代碼長度為7,表明它是四級節點,公司名稱是它的上上一節點的text,部門是上一節點的text,姓名當前節點的text,代碼是去除首字母的索引值。
上上一節點 Nodes.Parent.Parent3. 去除Text后面的“(代碼)“內容,因為比較重復,寫一個VBA自定義函數。代碼和級別的長度不一,所以不能直接用Left,需要再加一個函數組合用,用字符查找函數InStr查找”(“的位置,用instr,算出left的截止位置。
Function 截取名稱(AAA)截取名稱 = Left(AAA, InStr(1, AAA, "(") - 1) End Function完整代碼:
Private Sub TreeView1_Click() Dim MyItem As nodeSet MyItem = TreeView1.SelectedItem 'SelectedItem正在選取的節點If Len(MyItem.Key) = 2 Then 'SelectedItem.Key 正在選取節點的索引值TextBox1 = 截取名稱(MyItem.Text) '如果是頂級節點,公司名稱等于節點的顯示內容(去掉代碼)TextBox2.Value = ""TextBox3.Value = ""TextBox4 = Replace(MyItem.Key, "A", "") '替換掉A后的代碼 ElseIf Len(MyItem.Key) = 4 ThenTextBox1 = 截取名稱(MyItem.Parent.Text) ' MyItem.Parent.Text上一級節點的顯示文本TextBox2 = 截取名稱(MyItem.Text)TextBox3.Value = ""TextBox4 = Replace(MyItem.Key, "A", "") ElseIf Len(MyItem.Key) = 7 ThenTextBox1 = 截取名稱(MyItem.Parent.Parent.Text)TextBox2 = 截取名稱(MyItem.Parent.Text)TextBox3 = 截取名稱(MyItem.Text)TextBox4 = Replace(MyItem.Key, "A", "")End IfEnd Sub總結
以上是生活随笔為你收集整理的kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: obs可以推到中转服务器吗,[经验分享]
- 下一篇: 用电梯服务器怎样解电梯显示E34,默纳克