• 쇼핑몰
  • 커뮤니티
  • 북마크

vb.net




[Controls] [vb.net] TreeView Node(체크박스) 체크시 상위, 하위 노드 체크 적용( When checking the Tr…

하나를하더라도최선을
2020.07.01 12:04 203 0

본문



    Public NodeChecked As Boolean
    '// 체크박스 체크시 확인란이 선택되기 전
    Private Sub TRV_BeforeCheck(sender As Object, e As TreeViewCancelEventArgs) Handles TreeView1.BeforeCheck
 
    End Sub
 
    '// 체크박스 체크시 확인란이 선택된 후
    Private Sub TreeView1_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterCheck
        If NodeChecked Then Exit Sub
        NodeChecked = 1
        Dim Count As Integer = IIf(e.Node.Nodes.Count > 001)
        e.Node.ForeColor = IIf(e.Node.Checked, Color.Red, Color.Blue)
        LOG(NodesChecked(e.Node, e.Node.Checked, Count) & "개의 리스트가 " & Choose((Not e.Node.Checked) + 2"선택""해제"& "되었습니다."1)
        Dim C As TreeNode = e.Node.Parent
        Do While Not C Is Nothing
            If NodesCheckedCount(C) < 1 Then C.Checked = False Else C.Checked = True
            C = C.Parent
        Loop
        NodeChecked = 0
    End Sub
 
    '// 체크박스 체크/체크해제(리턴값 Node수량)
    Private Function NodesChecked(N As TreeNode, B As Boolean, Optional Count As Integer = 0As Integer
        If N.Nodes.Count = 0 Then Return Count
        For i As Integer = 0 To N.Nodes.Count - 1
            Count = NodesChecked(N.Nodes(i), B, Count)
            N.Nodes(i).Checked = B
            N.Nodes(i).ForeColor = IIf(B, Color.Red, Color.Blue)
            If N.Nodes(i).Nodes.Count = 0 Then Count += 1
        Next
        Return Count
    End Function
 
 
    Private Function NodesCheckedCount(ByVal TNS As TreeNode) As Integer
        Dim value As Integer
        If TNS.Nodes.Count = 0 Then value += IIf(TNS.Checked, 10)
        If TNS.Nodes.Count = 0 Then Return value
        For Each TN As TreeNode In TNS.Nodes
            If TN.Nodes.Count > 0 Then
                value += NodesCheckedCount(TN)
            Else
                value += IIf(TN.Checked, 10)
            End If
        Next
        Return value
    End Function
 


댓글목록 0

등록된 댓글이 없습니다.