我对这个treeview业务都很陌生。我有一个固定的树视图,非常简单和基本。只有两个级别,父节点和子节点。我只需要这个树视图中的两件事。检查Treeview节点
1)如果选中了父项,请检查所有子节点。
2)如果只有一个子节点未选中,请取消选中父节点。
就是这样!我一直在寻找这个30分钟,我无法找到它。也许是因为我的vb.net是旧的,它似乎没有像其他人一样= /我使用vb.net 2003.非常感谢:D
我对这个treeview业务都很陌生。我有一个固定的树视图,非常简单和基本。只有两个级别,父节点和子节点。我只需要这个树视图中的两件事。检查Treeview节点
1)如果选中了父项,请检查所有子节点。
2)如果只有一个子节点未选中,请取消选中父节点。
就是这样!我一直在寻找这个30分钟,我无法找到它。也许是因为我的vb.net是旧的,它似乎没有像其他人一样= /我使用vb.net 2003.非常感谢:D
在VB.Net 2008中的工作示例,但它应在2003工作:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
For i As Integer = 1 To 3
Dim node As New TreeNode("Parent #" & i.ToString)
node.Nodes.Add("Child #1")
node.Nodes.Add("Child #2")
node.Expand()
TreeView1.Nodes.Add(node)
Next
End Sub
Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles TreeView1.AfterCheck
RemoveHandler TreeView1.AfterCheck, AddressOf TreeView1_AfterCheck
For Each node As TreeNode In e.Node.Nodes
node.Checked = e.Node.Checked
Next
If e.Node.Checked Then
If e.Node.Parent Is Nothing = False Then
Dim allChecked As Boolean = True
For Each node As TreeNode In e.Node.Parent.Nodes
If Not node.Checked Then
allChecked = False
End If
Next
If allChecked Then
e.Node.Parent.Checked = True
End If
End If
Else
If e.Node.Parent Is Nothing = False Then
e.Node.Parent.Checked = False
End If
End If
AddHandler TreeView1.AfterCheck, AddressOf TreeView1_AfterCheck
End Sub
你可能想试试这个较短的版本
Private Sub treeview1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles treeview1.AfterCheck
Dim objNode As TreeNode = e.Node
Dim bCheck As Boolean = e.Node.Checked
For Each ChildNode As TreeNode In objNode.Nodes
ChildNode.Checked = bCheck
Next
End Sub
此工程于2010年VB.net它是基于李仁代码
Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
Dim childNodeCK As TreeNode = e.Node
Dim NodeChecked As Boolean = e.Node.Checked
For Each ChildNode As TreeNode In childNodeCK.Nodes
If NodeChecked = True Then
ChildNode.Checked = NodeChecked
End If
Next
If childNodeCK.Checked = False Then
If e.Node.Parent Is Nothing = False Then
e.Node.Parent.Checked = False
End If
End If
End Sub
我基本上有相同的要求,但我也希望如果所有的子节点都选中,请检查父节点。
这里是我的代码测试今天在VS 2013:
Private Sub TreeView1_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterCheck
If e.Action <> TreeViewAction.ByMouse And e.Action <> TreeViewAction.ByKeyboard Then Exit Sub
Dim CheckedNode As TreeNode = e.Node
Dim CheckedNodeIsRoot As Boolean = CheckedNode.Parent Is Nothing
Dim ParentNode As TreeNode = CheckedNode.Parent
Dim ChildOneUnchecked As Boolean = False
If CheckedNodeIsRoot Then
For Each ChildNode As TreeNode In CheckedNode.Nodes
ChildNode.Checked = CheckedNode.Checked
Next
Else
If CheckedNode.Checked Then
For Each ChildNode As TreeNode In ParentNode.Nodes
If Not ChildNode.Checked Then ChildOneUnchecked = True
Next
If ChildOneUnchecked Then
ParentNode.Checked = False
Else
ParentNode.Checked = True
End If
Else
ParentNode.Checked = False
End If
End If
End Sub
我必须补充说它是非递归的,所以它只能在两个层次上工作。 –
它的工作原理。稍微调整一下。 如果不e.Node.Checked AndAlso e.Node.Parent IsNot运算没有那么 到 如果e.Node.Checked =虚假和(e.Node.Parent是没什么= FALSE)然后 –
1件事,怎么如果发生所有子节点都被检查,我会检查父母吗? –
@Paul VB2003没有AndAlso或IsNot?我忘了那个。 – LarsTech