你的提问有问题,父节点和子节点是相对而言的。 你是不是要判断一个节点是否是叶节点? 可以用 Children 属性,这个属性返回包含在 Node 对象中的各子 Node 对象的个数。
if TreeView1.SelectedItem.Children>0 then msgbox "父节点"
在窗体中粘入下面代码(画个TreeView,命名为tvw) Private Sub Form_Load() With tvw .Nodes.Add , , "a", "a" .Nodes.Add "a", tvwChild, "ab", "ab" .Nodes.Add "a", tvwChild, "ac", "ac" .Nodes.Add "a", tvwChild, "ad", "ad"
End With End SubPrivate Sub tvw_NodeClick(ByVal Node As MSComctlLib.Node) If Node.Children = 0 Then MsgBox "子结点" Else MsgBox "父结点" End If End Sub
那请帮我看看这段插节点的程序: Private Sub Command1_Click() If Txt(0).Text <> "" And Txt(1).Text <> "" Then '不允许建立零字节的父节点和子节点 CunZai = False J = TreeView1.Nodes.Count For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在 if TreeView1.SelectedItem.Children>0 then If Txt(0).Text = TreeView1.Nodes(I).Text Then CunZai = True End If Next I If CunZai = True Then '若存在, 则在父节点下建立子节点 Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J, Txt(1).Text, 3) Else '若不存在,则建立父节点和子节点 Set nodx = TreeView1.Nodes.Add(, , Txt(0).Text, Txt(0).Text, 1) Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J, Txt(1).Text, 3) End If TreeView1.Refresh ElseIf Txt(0).Text = "" Then MsgBox "请输入父节点名称!", vbInformation, "警告!" '系统提示 ElseIf Txt(1).Text = "" Then MsgBox "请输入子节点名称!", vbInformation, "警告!" End If End Sub 问题就是当我创建一个父节点a和子节点b,正常。但接着我想在a下插入子节点c就会出错了。 但是如果在FormLoad时已经创建a和b的话,再插入c就会正常,不知道为什么,请指教。
就是不能在最后一个父节点插入子节点,在其他父节点都是正常的。如图: a |--b |--c d |--e这时候在d下面插入节点的话就会出现异常了。
Private Sub Command1_Click() If Txt(0).Text = "" or Txt(1).Text <> "" Then msgbox "请输入父结点 和 子结点" exit sub endif TreeView1.Nodes.Count For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在 If Txt(0).Text = TreeView1.Nodes(I).Text Then exit for Next I If i>treeview1.notes.cunt Then '存在, 则在父节点下建立子节点 Set nodx = TreeView1.Nodes.Add(treeview1.nodes(i).key, tvwChild, _ "child" & treeview1.nodes.count, Txt(1).Text, 3) Else '若不存在,则建立父节点和子节点 Set nodx = TreeView1.Nodes.Add(, ,"child" & treeview1.nodes.count , _ Txt(0).Text, 1) Set nodx = TreeView1.Nodes.Add("child" & treeview1.nodes.count - 1, _ tvwChild, "child" & treeview1.nodes.count, Txt(1).Text, 3) TreeView1.Refresh End Sub这里成立的条件是node的text没有重复的
If Txt(0).Text = "" or Txt(1).Text <> "" Then --> If Txt(0).Text = "" or Txt(1).Text = "" Then TreeView1.Nodes.Count --> 'TreeView1.Nodes.CountIf i>treeview1.notes.cunt Then '存在, 则在父节点下建立子节点 --> If i<=treeview1.notes.count Then '存在, 则在父节点下建立子节点 TreeView1.Refresh --> end if TreeView1.Refresh
你是不是要判断一个节点是否是叶节点?
可以用 Children 属性,这个属性返回包含在 Node 对象中的各子 Node 对象的个数。
Private Sub Form_Load()
With tvw
.Nodes.Add , , "a", "a"
.Nodes.Add "a", tvwChild, "ab", "ab"
.Nodes.Add "a", tvwChild, "ac", "ac"
.Nodes.Add "a", tvwChild, "ad", "ad"
End With
End SubPrivate Sub tvw_NodeClick(ByVal Node As MSComctlLib.Node)
If Node.Children = 0 Then
MsgBox "子结点"
Else
MsgBox "父结点"
End If
End Sub
Private Sub Command1_Click()
If Txt(0).Text <> "" And Txt(1).Text <> "" Then '不允许建立零字节的父节点和子节点
CunZai = False
J = TreeView1.Nodes.Count
For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在
if TreeView1.SelectedItem.Children>0 then
If Txt(0).Text = TreeView1.Nodes(I).Text Then
CunZai = True
End If
Next I
If CunZai = True Then '若存在, 则在父节点下建立子节点
Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J, Txt(1).Text, 3)
Else '若不存在,则建立父节点和子节点
Set nodx = TreeView1.Nodes.Add(, , Txt(0).Text, Txt(0).Text, 1)
Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J, Txt(1).Text, 3)
End If
TreeView1.Refresh
ElseIf Txt(0).Text = "" Then MsgBox "请输入父节点名称!", vbInformation, "警告!"
'系统提示
ElseIf Txt(1).Text = "" Then MsgBox "请输入子节点名称!", vbInformation, "警告!"
End If
End Sub
问题就是当我创建一个父节点a和子节点b,正常。但接着我想在a下插入子节点c就会出错了。
但是如果在FormLoad时已经创建a和b的话,再插入c就会正常,不知道为什么,请指教。
a
|--b
|--c
d
|--e这时候在d下面插入节点的话就会出现异常了。
你 在root下建立node 的 key 是 Txt(0).Text, text也是 txt(0).text
在其他情况,建立node(你认为他是sub node) 的key 是 “child”& nodes.count,
text 是txt(0).text
而你认为,当原来的子结点变成了父结点的时候,你遍历到了,却用txt(0).text做key ,而其实
他原来的key是"child" & nodes.count
If Txt(0).Text = "" or Txt(1).Text <> "" Then
msgbox "请输入父结点 和 子结点"
exit sub
endif TreeView1.Nodes.Count
For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在
If Txt(0).Text = TreeView1.Nodes(I).Text Then exit for
Next I
If i>treeview1.notes.cunt Then '存在, 则在父节点下建立子节点
Set nodx = TreeView1.Nodes.Add(treeview1.nodes(i).key, tvwChild, _
"child" & treeview1.nodes.count, Txt(1).Text, 3)
Else '若不存在,则建立父节点和子节点
Set nodx = TreeView1.Nodes.Add(, ,"child" & treeview1.nodes.count , _
Txt(0).Text, 1)
Set nodx = TreeView1.Nodes.Add("child" & treeview1.nodes.count - 1, _
tvwChild, "child" & treeview1.nodes.count, Txt(1).Text, 3)
TreeView1.Refresh
End Sub这里成立的条件是node的text没有重复的
-->
If Txt(0).Text = "" or Txt(1).Text = "" Then TreeView1.Nodes.Count
-->
'TreeView1.Nodes.CountIf i>treeview1.notes.cunt Then '存在, 则在父节点下建立子节点
-->
If i<=treeview1.notes.count Then '存在, 则在父节点下建立子节点
TreeView1.Refresh
-->
end if
TreeView1.Refresh