Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) If Node Is Nothing Then Exit Sub End If Call LoadData2(Node) End Sub其實你可以一個個debug.print出所有事件的順序
没有事件发生. 不信你看下面试验程序: 在调试窗口中会列出当前所发生的事件(已经将MOUSERMOVE排除).'**实验程序***'引用==>Microsoft Scripting Runtime Private WithEvents Ev_ConDfmt As VBControlExtender '定义一个通用事件Private Sub Form_Load() Dim fs As New FileSystemObject Dim fd As Folder, sfd As Folder
Set TreeView1.ImageList = ImageList1
TreeView1.Nodes.Add , , "c:\", "c:\", "Drive" Set fd = fs.GetFolder("c:\") For Each sfd In fd.SubFolders TreeView1.Nodes.Add "c:\", tvwChild, "A" & sfd.Name, sfd.Name, "Folder" Combo1.AddItem "A" & sfd.Name Next ' Combo1.Text = Combo1.List(0) ' TreeView1.Nodes("c:\").Expanded = True Set Ev_ConDfmt = TreeView1 End SubPrivate Sub Ev_ConDfmt_ObjectEvent(Info As EventInfo) '通用事件接口(用于不属于标准EXE控件) Dim P As EventParameter Dim MidStr As String
On Error Resume Next If UCase$(Info.Name) <> "MOUSEMOVE" Then Debug.Print UCase$(Info.Name) End Sub
当然... 你可以自定义一个事件... 侦测到两个NODE的KEY值不同时,你引发该事件即可.
9, 如何控制点击不同的节点执行不同的任务 Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node) ' MsgBox Mid(Node.Key, 1, 1) ' MsgBox Node.Key '输出节点k的位置 ' MsgBox Node.Text '输出节点的值 If Node.Text = "aa" Then MsgBox ("ok") End If End Sub 1,添加节点: TreeView1.Nodes.Add , "R", "root", "" TreeView1.Nodes.Add "root", tvwChild, "key1", "aa" TreeView1.Nodes.Add "key1", tvwChild, "key11", "ccc" TreeView1.Nodes.Add "root", tvwChild, "key2", "bb" TreeView1.Nodes.Add "key2", tvwChild, "key21", "ddd" TreeView1.Nodes.Add "key2", tvwChild, "key22", "eee" TreeView1.Nodes.Add "key22", tvwChild, "key221", "fff" For i = 1 To TreeView1.Nodes.Count TreeView1.Nodes(i).Expanded = True '展开纪录 Next ' TreeView1.Checkboxes = True '添加复选框 TreeView1.Nodes.Add , "R", "root", "" TreeView1.Nodes.Add "root", tvwChild, "key1", "aa" TreeView1.Nodes.Add "key1", tvwChild, "key11", "ccc" TreeView1.Nodes.Add "root", tvwChild, "key2", "bb" TreeView1.Nodes.Add "key2", tvwChild, "key21", "ddd" TreeView1.Nodes.Add "key2", tvwChild, "key22", "eee" TreeView1.Nodes.Add "key22", tvwChild, "key221", "fff" For i = 1 To TreeView1.Nodes.Count TreeView1.Nodes(i).Expanded = True '展开纪录 Next 'TreeView1.Checkboxes = True '添加复选框Dim nodX As Node
'add some test items Set nodX = TV1.Nodes.Add(, , "R", "Root") Set nodX = TV1.Nodes.Add("R", tvwChild, "C1", "Child 1") Set nodX = TV1.Nodes.Add("R", tvwChild, "C2", "Child 2") Set nodX = TV1.Nodes.Add("R", tvwChild, "C3", "Child 3") Set nodX = TV1.Nodes.Add("R", tvwChild, "C4", "Child 4") nodX.EnsureVisible
Set nodX = TV1.Nodes.Add("C4", tvwChild, "C41", "Child 4 Subchild 1") nodX.EnsureVisible 2,添加复选框 'TreeView1.Checkboxes = True '添加复选框 3,遍历TreeView的代码Private Sub Command1_Click() Dim i As Long
For i = 1 To TreeView1.Nodes.Count MsgBox TreeView1.Nodes(i).Text Next End Sub 4点击某个节点得到次节点的路径 Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) MsgBox Node.FullPath End Sub 7, 全部展开与合龙树 For i = 1 To TreeView1.Nodes.Count TreeView1.Nodes(i).Expanded = True '展开纪录 Next 8, 输出节点K的位置 Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node) ' MsgBox Mid(Node.Key, 1, 1) MsgBox Node.Key '輸出節點的k的值(節點位置)End Sub 9, 如何控制点击不同的节点执行不同的任务 Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node) ' MsgBox Mid(Node.Key, 1, 1) ' MsgBox Node.Key '输出节点k的位置 ' MsgBox Node.Text '输出节点的值 If Node.Text = "aa" Then MsgBox ("ok") End If End Sub 10, 清空所有的节点 TreeView1.Nodes.Clear 9,添加图片: Dim imgx As ListImage Set imgx = ImageList1.ListImages.Add(, , LoadPicture("c:\1.ico")) Set imgx = ImageList1.ListImages.Add(, , LoadPicture("c:\2.ico"))
TreeView1.ImageList = ImageList1可是我想把ICO放到VB做的软件的目录里,并且不想用绝对路径。。 要怎么弄?Set imgx = ImageList1.ListImages.Add(, , LoadPicture(app.Path & "\1.ico")) 或者把图片放到ImageList控件里。 添加ImageList控件到窗体,设置自定义,--->图像---->插入图片10,读入数据 一个表 id(index) parentid name 1 o a 2 1 aa 3 1 ab 4 2 aa1如何生成树 a- aa | - aa1 |ab 谢谢 SQL = "SELECT * FROM 表 ORDER BY parentid" rs.open SQL Do Until rs.EOF If rs!parentid = 0 Then tvDB.Nodes.Add , , "N" & rs!id, rs!name Else tvDB.Nodes.Add "N" & rs!parentid, 4, "N" & rs!id, rs!name End If rs.movenext Loop
If Node Is Nothing Then
Exit Sub
End If
Call LoadData2(Node)
End Sub其實你可以一個個debug.print出所有事件的順序
不信你看下面试验程序:
在调试窗口中会列出当前所发生的事件(已经将MOUSERMOVE排除).'**实验程序***'引用==>Microsoft Scripting Runtime
Private WithEvents Ev_ConDfmt As VBControlExtender '定义一个通用事件Private Sub Form_Load()
Dim fs As New FileSystemObject
Dim fd As Folder, sfd As Folder
Set TreeView1.ImageList = ImageList1
TreeView1.Nodes.Add , , "c:\", "c:\", "Drive"
Set fd = fs.GetFolder("c:\")
For Each sfd In fd.SubFolders
TreeView1.Nodes.Add "c:\", tvwChild, "A" & sfd.Name, sfd.Name, "Folder"
Combo1.AddItem "A" & sfd.Name
Next
' Combo1.Text = Combo1.List(0)
' TreeView1.Nodes("c:\").Expanded = True
Set Ev_ConDfmt = TreeView1
End SubPrivate Sub Ev_ConDfmt_ObjectEvent(Info As EventInfo) '通用事件接口(用于不属于标准EXE控件)
Dim P As EventParameter
Dim MidStr As String
On Error Resume Next If UCase$(Info.Name) <> "MOUSEMOVE" Then Debug.Print UCase$(Info.Name)
End Sub
你可以自定义一个事件...
侦测到两个NODE的KEY值不同时,你引发该事件即可.
Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
' MsgBox Mid(Node.Key, 1, 1)
' MsgBox Node.Key '输出节点k的位置
' MsgBox Node.Text '输出节点的值
If Node.Text = "aa" Then
MsgBox ("ok")
End If
End Sub
1,添加节点:
TreeView1.Nodes.Add , "R", "root", ""
TreeView1.Nodes.Add "root", tvwChild, "key1", "aa"
TreeView1.Nodes.Add "key1", tvwChild, "key11", "ccc"
TreeView1.Nodes.Add "root", tvwChild, "key2", "bb"
TreeView1.Nodes.Add "key2", tvwChild, "key21", "ddd"
TreeView1.Nodes.Add "key2", tvwChild, "key22", "eee"
TreeView1.Nodes.Add "key22", tvwChild, "key221", "fff"
For i = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded = True '展开纪录
Next
' TreeView1.Checkboxes = True '添加复选框
TreeView1.Nodes.Add , "R", "root", ""
TreeView1.Nodes.Add "root", tvwChild, "key1", "aa"
TreeView1.Nodes.Add "key1", tvwChild, "key11", "ccc"
TreeView1.Nodes.Add "root", tvwChild, "key2", "bb"
TreeView1.Nodes.Add "key2", tvwChild, "key21", "ddd"
TreeView1.Nodes.Add "key2", tvwChild, "key22", "eee"
TreeView1.Nodes.Add "key22", tvwChild, "key221", "fff"
For i = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded = True '展开纪录
Next
'TreeView1.Checkboxes = True '添加复选框Dim nodX As Node
'add some test items
Set nodX = TV1.Nodes.Add(, , "R", "Root")
Set nodX = TV1.Nodes.Add("R", tvwChild, "C1", "Child 1")
Set nodX = TV1.Nodes.Add("R", tvwChild, "C2", "Child 2")
Set nodX = TV1.Nodes.Add("R", tvwChild, "C3", "Child 3")
Set nodX = TV1.Nodes.Add("R", tvwChild, "C4", "Child 4")
nodX.EnsureVisible
Set nodX = TV1.Nodes.Add("C3", tvwChild, "C31", "Child 3 SubC 1")
Set nodX = TV1.Nodes.Add("C3", tvwChild, "C32", "Child 3 SubC 2")
nodX.EnsureVisible
Set nodX = TV1.Nodes.Add("C31", tvwChild, "C321", "Child 3 SubC 1 SubC 1")
Set nodX = TV1.Nodes.Add("C4", tvwChild, "C41", "Child 4 Subchild 1")
nodX.EnsureVisible
2,添加复选框
'TreeView1.Checkboxes = True '添加复选框
3,遍历TreeView的代码Private Sub Command1_Click()
Dim i As Long
For i = 1 To TreeView1.Nodes.Count
MsgBox TreeView1.Nodes(i).Text
Next
End Sub
4点击某个节点得到次节点的路径
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
MsgBox Node.FullPath
End Sub
7, 全部展开与合龙树
For i = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded = True '展开纪录
Next
8, 输出节点K的位置
Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
' MsgBox Mid(Node.Key, 1, 1)
MsgBox Node.Key '輸出節點的k的值(節點位置)End Sub
9, 如何控制点击不同的节点执行不同的任务
Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
' MsgBox Mid(Node.Key, 1, 1)
' MsgBox Node.Key '输出节点k的位置
' MsgBox Node.Text '输出节点的值
If Node.Text = "aa" Then
MsgBox ("ok")
End If
End Sub
10, 清空所有的节点
TreeView1.Nodes.Clear
9,添加图片:
Dim imgx As ListImage
Set imgx = ImageList1.ListImages.Add(, , LoadPicture("c:\1.ico"))
Set imgx = ImageList1.ListImages.Add(, , LoadPicture("c:\2.ico"))
TreeView1.ImageList = ImageList1可是我想把ICO放到VB做的软件的目录里,并且不想用绝对路径。。
要怎么弄?Set imgx = ImageList1.ListImages.Add(, , LoadPicture(app.Path & "\1.ico"))
或者把图片放到ImageList控件里。
添加ImageList控件到窗体,设置自定义,--->图像---->插入图片10,读入数据
一个表
id(index) parentid name
1 o a
2 1 aa
3 1 ab
4 2 aa1如何生成树
a- aa
| - aa1
|ab
谢谢
SQL = "SELECT * FROM 表 ORDER BY parentid"
rs.open SQL
Do Until rs.EOF
If rs!parentid = 0 Then
tvDB.Nodes.Add , , "N" & rs!id, rs!name
Else
tvDB.Nodes.Add "N" & rs!parentid, 4, "N" & rs!id, rs!name
End If
rs.movenext
Loop