VB6 Treeview Image Loop изменение изображения - PullRequest
2 голосов
/ 24 октября 2019

С учетом следующих изображений:

изображение = 4 - зеленый значок

изображение = 3 - красный значок

Мой ii индекс не перемещается на следующий элемент,он показывает тот же индекс, что и при прохождении через цикл, как я проверил, проходя через каждый цикл.

Я хочу изменить значок всех дочерних элементов на Image = 3

Dim FoundIt As Boolean, ii As Integer, ix As Integer
Dim NodX As Node, NodX2 As Node

On Error Resume Next

For Each NodX2 In TreeView2.Nodes

    If NodX2.Parent.Image = 4 Then
        ii = NodX2.Child.Index
        TreeView2.Nodes(ii).Parent.Child.Image = 3
        Debug.Print ii ' when i step through it repeats the same index,only the first child changes to image = 3
        Pause 0
    End If
Next

Ответы [ 4 ]

1 голос
/ 24 октября 2019
Dim NodX As Node
Dim NodX2 As Node
Dim iCounter As Integer

On Error Resume Next

For Each NodX In TreeView2.Nodes

    If NodX.Image = 4 Then

        ' Check for Children
        If NodX.Children > 0 Then

            ' Get first Child
            Set NodX2 = NodX.Child

            ' Loop through all children
            For iCounter = 1 To NodX.Children

                ' Set image to 3 if it was 5
                If NodX2.Image = 5 And NodX2.Parent.Image = 4 Then NodX2.Image = 3

                ' Get next node
                Set NodX2 = NodX2.Next

            Next

        End If

    End If
Next

сделал это спасибо.

1 голос
/ 24 октября 2019
Dim NodX As Node
Dim NodX2 As Node
Dim iCounter As Integer

On Error Resume Next

For Each NodX In TreeView2.Nodes

    If NodX.Parent.Image = 4 Then

        ' Check for Children
        If NodX.Children > 0 Then

            ' Get first Child
            Set NodX2 = NodX.Child

            ' Loop through all children
            For iCounter = 1 To NodX.Children
                ' Set image
                If NodX2.Parent.Image = 4 Then
                NodX2.Image = 3
                End If
                ' Get next node
                Set NodX2 = NodX2.Next
            Next

        End If

    End If
Next
1 голос
/ 24 октября 2019

как мне добавить вот так.

Dim NodX As Node
Dim NodX2 As Node
Dim iCounter As Integer

On Error Resume Next

For Each NodX In TreeView2.Nodes

    'If NodX.Parent.Image = 4 Then
    If NodX.Parent.Image = 4 Then
        ' Check for Children
        If NodX.Children > 0 Then

            ' Get first Child
            Set NodX2 = NodX.Child

            ' Loop through all children
            For iCounter = 1 To NodX.Children
                ' Set image
                If NodX2.Parent.Image = 4 And NodX2.Parent.Child.Image = 5 Then
                NodX2.Image = 3
                End If
                ' Get next node
                Set NodX2 = NodX2.Next
            Next

        End If

    End If
Next

, поэтому в основном проверьте, если родительский значок равен 4, а все дочерние элементы - 5, а затем выполните код. я пробовал, однако только 1 ребенок становится NodX2.Image = 3

0 голосов
/ 24 октября 2019

Ваш первый For Each цикл должен использовать NodX. Внутри этого цикла вы можете перебрать все дочерние элементы NodX, используя NodX2:

Dim objNode As Node
Dim objChildNode As Node
Dim iCounter As Integer
Dim fProceed As Boolean

On Error Resume Next

For Each objNode In TreeView2.Nodes

    If objNode.Image = 4 Then

        ' Check for Children
        If objNode.Children > 0 Then

            ' Get first Child
            Set objChildNode = objNode.Child

            ' Initialize flag
            fProceed = True

            ' Loop through all children
            For iCounter = 1 To objNode.Children

                ' Set image to 3 if it was 5
                If objChildNode.Image <> 5 Then
                    fProceed = False
                    Exit For
                End If

                ' Get next node
                Set objChildNode = objChildNode.Next

            Next

            If fProceed Then

                ' Get first Child again
                Set NodX2 = NodX.Child

                ' Loop through all children
                For iCounter = 1 To objNode.Children

                    ' Set image to 3
                    objChildNode.Image = 3

                    ' Get next node
                    Set objChildNode = objChildNode.Next

                Next

            End If

        End If

    End If

Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...