'---==以下设置节点==--- Dim Node1 As Node, Node2 As Node Dim dzd_tmp1 As String Dim xzd_tmp1 As String '填充treeview For I = 1 To 5 DoEvents
dzd_tmp1 = "xx" & I Set Node1 = TreeView1.Nodes.Add(, , , dzd_tmp1) For j = 1 To 5 DoEvents xzd_tmp1 = "y" & j Set Node2 = TreeView1.Nodes.Add(Node1.Index, _ tvwChild, , xzd_tmp1) Next Node1.Expanded = False Next End Sub
看MSDN 里面有比较基本且容易理解的例子 这个例子创建几个 Node 对象。在单击 Node 对象时,代码首先使用 Children 属性确定 Node 是否有子节点。如果有,窗体的标题就显示 Child 节点的文本。Option ExplicitPrivate Sub Form_Load() '这一代码创建一棵带有三个 Node 对象的树。 TreeView1.Style = tvwTreelinesPlusMinusText ' Style 6. TreeView1.LineStyle = tvwRootLines 'Linestyle 1. '添加几个Node对象。 Dim nodX As Node '创建变量。 Set nodX = TreeView1.Nodes.Add(, , "r", "Root") Set nodX = TreeView1.Nodes.Add("r", tvwChild, "c1", "Child 1") nodX.EnsureVisible '显示全部节点。 Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c2", "Child 2") Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c3", "Child 3") nodX.EnsureVisible '显示全部节点。 End SubPrivate Sub TreeView1_NodeClick(ByVal Node As Node) '如果该节点确有子节点,则显示 '该子节点的文本。 If Node.Children Then Caption = Node.Child.Text End If End Sub
楼上有人说得好.TREEVIEW跟数据库没关系. 数据库表中的记录读到变量,这是读取数据库的问题. 把变量赋给TREEVIEW节点,这是TREEVIEW的问题. 连起来就行了.给个示例函数,是添加某个树型目录子节点的.不是很完整,自己琢磨一下吧.Sub AddChild(Tempindex As Integer, Tempnodename As String) '///////////////加树型某个子节点菜单 Dim ONodex As Node Dim sKey As String Dim iIndex As Integer
iIndex = Tempindex sKey = GetNextKey '设置新子节点KEY Set ONodex = TreeView1.Nodes.Add(iIndex, tvwChild, sKey, Tempnodename) ONodex.EnsureVisible '子节点设置为可见 Exit SubEnd SubPrivate Function GetNextKey() As String '/////////树型目录菜单关键字调用过程 Dim sNewKey As String Dim iHold As Integer Dim i As Integer On Error GoTo Myerr iHold = Val(TreeView1.Nodes(1).Key) For i = 1 To TreeView1.Nodes.Count If Val(TreeView1.Nodes(i).Key) > iHold Then iHold = Val(TreeView1.Nodes(i).Key) End If Next iHold = iHold + 1 sNewKey = CStr(iHold) & "_" GetNextKey = sNewKey Exit Function Myerr: GetNextKey = "1_" Exit Function End Function
人家是用TREEVIEW来加载数据库里面的内容,相当于TREEVIEW是当做容器来用的
请大家帮忙看看以下代码,测试的时候出现“未发现该元素”或找不到对像,请问错在哪个地方: Public Nod As Node '声明树节点 Dim Cnn As Adodb.Connection Dim Rs As Adodb.Recordset Private Sub Form_Load() 'On Error Resume Next Set Cnn = New Adodb.Connection Cnn.ConnectionString = Connstring Cnn.Open Cnn.CursorLocation = adUseClient Set Rs = New Adodb.Recordset Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable
'---==以下设置节点==--- Dim Node1 As Node, Node2 As Node Dim dzd_tmp1 As String Dim xzd_tmp1 As String '填充treeview Do While Not Rs.EOF If Rs!Root = 0 Then Set dzd_tmp1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1) Else Set xzd_tmp1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3) End If Rs.MoveNext Loop
If TVW.Nodes.Count > 0 Then '展开第一级 TVW.Nodes(1).Expanded = True End IfEnd Sub
Set dzd_tmp1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
treeview跟ImageList控件绑定了吗,并且里面有序号为1的图像吗
dzd_tmp1变量类型不对,应该Node类型
我没有绑定图片,变量类型改为node类型还是不行,出现“未发现该元素”
try If Rs!Root = 0 Then Set dzd_tmp1 = TreeView1.Nodes.Add("A", , "B" & Rs!部门名称, Rs!班组名称, 1) Else Set xzd_tmp1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3) End If
仔细看了lz的程序,实际上是没有根tryPublic Nod As Node '声明树节点 Dim Cnn As Adodb.Connection Dim Rs As Adodb.RecordsetPrivate Sub Form_Load() 'On Error Resume Next Set Cnn = New Adodb.Connection Cnn.ConnectionString = Connstring Cnn.Open Cnn.CursorLocation = adUseClient Set Rs = New Adodb.Recordset Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable'初始化treeview TreeView1.HideSelection = True TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离 TreeView1.LabelEdit = tvwManual TreeView1.LineStyle = tvwRootLines'---==以下设置节点==--- Dim Node1 As Node, Node2 As Node Dim dzd_tmp1 As String Dim xzd_tmp1 As String '填充treeview Set Node1 = TreeView1.Nodes.Add(, , "A", "公司")Do While Not Rs.EOF If Rs!Root = 0 Then Set Node1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1) Else Set Node1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3) End If
Rs.MoveNext LoopIf TVW.Nodes.Count > 0 Then '展开第一级 TVW.Nodes(1).Expanded = True End IfEnd Sub
Public Nod As Node '声明树节点 Dim Cnn As Adodb.Connection Dim Rs As Adodb.RecordsetPrivate Sub Form_Load() 'On Error Resume Next Set Cnn = New Adodb.Connection Cnn.ConnectionString = Connstring Cnn.Open Cnn.CursorLocation = adUseClient Set Rs = New Adodb.Recordset Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable'初始化treeview TreeView1.HideSelection = True TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离 TreeView1.LabelEdit = tvwManual TreeView1.LineStyle = tvwRootLines'---==以下设置节点==--- Dim Node1 As Node, Node2 As Node Dim dzd_tmp1 As String Dim xzd_tmp1 As String '填充treeview Set Node1 = TreeView1.Nodes.Add(, , "A", "公司")'应该加这个Do While Not Rs.EOF If Rs!Root = 0 Then Set Node1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1) Else Set Node1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3) End If
Rs.MoveNext LoopIf TVW.Nodes.Count > 0 Then '展开第一级 TVW.Nodes(1).Expanded = True End IfEnd Sub
'初始化treeview
TreeView1.HideSelection = True
TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
TreeView1.LabelEdit = tvwManual
TreeView1.LineStyle = tvwRootLines
'---==以下设置节点==---
Dim Node1 As Node, Node2 As Node
Dim dzd_tmp1 As String
Dim xzd_tmp1 As String
'填充treeview
For I = 1 To 5
DoEvents
dzd_tmp1 = "xx" & I
Set Node1 = TreeView1.Nodes.Add(, , , dzd_tmp1)
For j = 1 To 5
DoEvents
xzd_tmp1 = "y" & j
Set Node2 = TreeView1.Nodes.Add(Node1.Index, _
tvwChild, , xzd_tmp1)
Next
Node1.Expanded = False
Next
End Sub
这个例子创建几个 Node 对象。在单击 Node 对象时,代码首先使用 Children 属性确定 Node 是否有子节点。如果有,窗体的标题就显示 Child 节点的文本。Option ExplicitPrivate Sub Form_Load()
'这一代码创建一棵带有三个 Node 对象的树。
TreeView1.Style = tvwTreelinesPlusMinusText ' Style 6.
TreeView1.LineStyle = tvwRootLines 'Linestyle 1. '添加几个Node对象。
Dim nodX As Node '创建变量。 Set nodX = TreeView1.Nodes.Add(, , "r", "Root")
Set nodX = TreeView1.Nodes.Add("r", tvwChild, "c1", "Child 1") nodX.EnsureVisible '显示全部节点。
Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c2", "Child 2")
Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c3", "Child 3")
nodX.EnsureVisible '显示全部节点。
End SubPrivate Sub TreeView1_NodeClick(ByVal Node As Node)
'如果该节点确有子节点,则显示
'该子节点的文本。
If Node.Children Then
Caption = Node.Child.Text
End If
End Sub
数据库表中的记录读到变量,这是读取数据库的问题.
把变量赋给TREEVIEW节点,这是TREEVIEW的问题.
连起来就行了.给个示例函数,是添加某个树型目录子节点的.不是很完整,自己琢磨一下吧.Sub AddChild(Tempindex As Integer, Tempnodename As String) '///////////////加树型某个子节点菜单
Dim ONodex As Node
Dim sKey As String
Dim iIndex As Integer
iIndex = Tempindex
sKey = GetNextKey '设置新子节点KEY
Set ONodex = TreeView1.Nodes.Add(iIndex, tvwChild, sKey, Tempnodename)
ONodex.EnsureVisible '子节点设置为可见
Exit SubEnd SubPrivate Function GetNextKey() As String '/////////树型目录菜单关键字调用过程
Dim sNewKey As String
Dim iHold As Integer
Dim i As Integer
On Error GoTo Myerr
iHold = Val(TreeView1.Nodes(1).Key)
For i = 1 To TreeView1.Nodes.Count
If Val(TreeView1.Nodes(i).Key) > iHold Then
iHold = Val(TreeView1.Nodes(i).Key)
End If
Next
iHold = iHold + 1
sNewKey = CStr(iHold) & "_"
GetNextKey = sNewKey
Exit Function
Myerr:
GetNextKey = "1_"
Exit Function
End Function
Public Nod As Node '声明树节点
Dim Cnn As Adodb.Connection
Dim Rs As Adodb.Recordset
Private Sub Form_Load()
'On Error Resume Next
Set Cnn = New Adodb.Connection
Cnn.ConnectionString = Connstring
Cnn.Open
Cnn.CursorLocation = adUseClient
Set Rs = New Adodb.Recordset
Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable
'初始化treeview
TreeView1.HideSelection = True
TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
TreeView1.LabelEdit = tvwManual
TreeView1.LineStyle = tvwRootLines
'---==以下设置节点==---
Dim Node1 As Node, Node2 As Node
Dim dzd_tmp1 As String
Dim xzd_tmp1 As String
'填充treeview
Do While Not Rs.EOF
If Rs!Root = 0 Then
Set dzd_tmp1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
Else
Set xzd_tmp1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
End If
Rs.MoveNext
Loop
If TVW.Nodes.Count > 0 Then '展开第一级
TVW.Nodes(1).Expanded = True
End IfEnd Sub
Set dzd_tmp1 = TreeView1.Nodes.Add("A", , "B" & Rs!部门名称, Rs!班组名称, 1)
Else
Set xzd_tmp1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
End If
object.Add(relative, relationship, key, text, image, selectedimage)
Add 方法的语法包含下面部分:
描述
object 必需的。对象表达式,其值是“应用于”列表中的一个对象
relative 可选的。已存在的 Node 对象的索引号或键值。新节点与已存在的节点间的关系,可在下一个参数 relationship 中找到。
relationship 可选的。指定的 Node 对象的相对位置,如设置值中所述。
key 可选的。唯一的字符串,可用于用 Item 方法检索 Node。
text 必需的。在 Node 中出现的字符串。
image 可选的。在关联的 ImageList 控件中的图像的索引。
selectedimage 可选的。在关联的 ImageList 控件中的图像的索引,在 Node 被选中时显示。
设置值
relationship 的设置值是:
常数 值 描述
tvwFirst 0 首的节点。该 Node 和在 relative 中被命名的节点位于同一层,并 位于所有同层节点之前。
tvwLast 1 最后的节点。该 Node 和在 relative 中被命名的节点位于同一层,并 位于所有同层节点之后。任何连续地添加的节点可能位于最后添加的节点之后
tvwNext 2 (缺省)下一个节点。该 Node 位于在 relative 中被命名的节点之后。
tvwPrevious 3 前一个节点。该 Node 位于在 relative 中被命名的节点之前。
tvwChild 4 (缺省)子节点。该 Node 成为在 relative 中被命名的
节点的子节点。
注意 如果在 relative 中没有被命名的 Node 对象,则新节点被放在节点顶层的最后位置。
说明
Nodes 集合是一个基于 1 的集合。
在添加 Node 对象时,它被指派一个索引号,该索引号被存储在 Node 对象的 Index 属性中。这个最新成员的 Index 属性值就是 Node 集合的 Count 属性的值。
因为 Add 方法返回对新建立的 Node 对象的引用,所以使用这个引用来设置新 Node 的属性十分方便。以下例子添加几个具有相同属性的 Node 对象:
Dim nodX As Node '声明对象变量。
Dim I as Integer '声明计数器变量。
For I = 1 to 4
Set nodX = TreeView1.Nodes.Add(,,,"Node " & Cstr(i))
'使用引用来设置其它属性,如 Enabled。
nodX.Enabled = True
'把图像属性设置为在关联的 ImageList 中的图像 3。
nodX.ExpandedImage = 3
Next I
Add 方法示例
以下例子给 TreeView 控件添加两个 Node 对象。为试用此例,在窗体上安放一个 TreeView 控件,并在窗体的声明部分中粘贴下面的代码。运行此例,且单击 Node 对象以展开它。
Private Sub Form_Load()
'设置 Treeview 控件属性。
TreeView1.LineStyle = tvwRootLines ' Linestyle 1
'添加 Node 对象。
Dim nodX As Node '声明 Node 变量。
'带有文本 'Root' 的第一个节点。
Set nodX = TreeView1.Nodes.Add(, , "r", "Root")
'下一个节点是节点 1 ("Root") 的子节点。
Set nodX = TreeView1.Nodes.Add("r", tvwChild, "child1", "Child")
End Sub
19楼错误***********************
Set dzd_tmp1 = TreeView1.Nodes.Add(, , "B" & Rs!部门名称, Rs!班组名称, 1)
Dim Cnn As Adodb.Connection
Dim Rs As Adodb.RecordsetPrivate Sub Form_Load()
'On Error Resume Next
Set Cnn = New Adodb.Connection
Cnn.ConnectionString = Connstring
Cnn.Open
Cnn.CursorLocation = adUseClient
Set Rs = New Adodb.Recordset
Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable'初始化treeview
TreeView1.HideSelection = True
TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
TreeView1.LabelEdit = tvwManual
TreeView1.LineStyle = tvwRootLines'---==以下设置节点==---
Dim Node1 As Node, Node2 As Node
Dim dzd_tmp1 As String
Dim xzd_tmp1 As String
'填充treeview
Set Node1 = TreeView1.Nodes.Add(, , "A", "公司")Do While Not Rs.EOF
If Rs!Root = 0 Then
Set Node1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
Else
Set Node1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
End If
Rs.MoveNext
LoopIf TVW.Nodes.Count > 0 Then '展开第一级
TVW.Nodes(1).Expanded = True
End IfEnd Sub
Dim Cnn As Adodb.Connection
Dim Rs As Adodb.RecordsetPrivate Sub Form_Load()
'On Error Resume Next
Set Cnn = New Adodb.Connection
Cnn.ConnectionString = Connstring
Cnn.Open
Cnn.CursorLocation = adUseClient
Set Rs = New Adodb.Recordset
Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable'初始化treeview
TreeView1.HideSelection = True
TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
TreeView1.LabelEdit = tvwManual
TreeView1.LineStyle = tvwRootLines'---==以下设置节点==---
Dim Node1 As Node, Node2 As Node
Dim dzd_tmp1 As String
Dim xzd_tmp1 As String
'填充treeview
Set Node1 = TreeView1.Nodes.Add(, , "A", "公司")'应该加这个Do While Not Rs.EOF
If Rs!Root = 0 Then
Set Node1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
Else
Set Node1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
End If
Rs.MoveNext
LoopIf TVW.Nodes.Count > 0 Then '展开第一级
TVW.Nodes(1).Expanded = True
End IfEnd Sub