2011-08-31 6 views
1

저는이 트 리뷰 비즈니스에 새로운입니다. 나는 고정 트리 뷰를 가지고 있으며, 매우 간단하고 기본적인 것이다. 부모 노드와 자식 노드의 두 레벨 만 있습니다. 이 트리 뷰에서 두 가지가 필요합니다.트 리뷰 노드 확인

1) 상위가 선택된 경우 모든 하위 노드를 확인하십시오.

2) 자식 노드가 하나만 선택 취소되어 있으면 부모 노드의 선택을 취소하십시오.

그게 전부 야! 나는 이것을 30 분 동안 찾고 있었는데 그것을 찾을 수 없다. 어쩌면 내 vb.net은 오래 되었기 때문에 다른 사람들과 동일하지는 않습니다./vb.net 2003을 사용하고 있습니다. 매우 감사합니다. D

답변

3

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 
+0

가 작동합니다. 조금 조정 한 후. 하지 않을 경우 e.Node.Checked AndAlso e.Node.Parent IsNot 아무것도 그런 에 만약 e.Node.Checked = 거짓 다음 –

+0

한 가지 더, 방법 (e.Node.Parent은 거짓 아무것도 = 없음) 모든 하위 노드를 검사하면 상위 노드를 검사합니까? –

+0

@Paul VB2003에는 AndAlso 또는 IsNot가 없습니다. 나는 그것을 잊었다. – LarsTech

1

는이 짧은 버전이이 다니엘 리 코드를 기반으로 VB.net 2010에서 작동

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 
0

을 시도 할 수 있습니다

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 
1

기본적으로 동일한 요구 사항이 있지만 모든 하위 노드를 검사 할 경우 부모 노드를 확인해야합니다. 여기

는 내 코드는 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 
+0

나는 그것을 재귀 적이 아닌 것으로 추가해야하므로 두 단계에서만 작동합니다. –