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