• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

almamater

Treeview - Mudar a cor

10 mensagens neste tópico

Olá..

Antes de mais estou a usar o VB Express Edition do site da Microsoft..

Tenho uma TreeView e uma opção para pesquisar Items na mesma, tudo OK, acontece que qdo um 'Node' é descoberto pela pesquisa para se diferenciar ele muda-lhe a cor para Azul..

A minha dúvida: Como posso percorrer todos os Nodes (parents/childs) e mudar-lhes a cor para Preto outro vez?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já experimentaste fazer:

For Each node As TreeNode In TreeView1.Nodes
          'Código para mudar a cor ao NODE
Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, e os childnodes? E os childnodes dos childnodes? E os childnodes dos childnodes dos childnodes? (........)

Terás de recorrer a um método recursivo que verifica se o node actual tem childnodes, recursivamente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, e os childnodes? E os childnodes dos childnodes? E os childnodes dos childnodes dos childnodes? (........)

Terás de recorrer a um método recursivo que verifica se o node actual tem childnodes, recursivamente.

exactamente... e uma vez que todos têm childnodes qual o método para esse caso?

Da dorma que o Weasel disse funciona mas apenas para os "Parent".. o que agradeço desde já!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Recursividade, como já te falei.

em pseudo código ficaria algo do género:

Por cada No da Treeview  ->  Chama "Ve nodes todos(Nodeparent)"

SUB Ve nodes todos(Nodeactual)
Se o node actual tiver nodes então - >Chama "Ve nodes todos(Node actual)"
Case não tenha mais nodes,
Por cada No do nodeactual -> Troca a cor

Vão se subindo níveis de nodes até que se chege a um que não tem mais filhos e verifica-se todo esse nível.

Se mesmo assim está complicado, já fiz um exemplo. Posto aqui se quiseres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Recursividade, como já te falei.

em pseudo código ficaria algo do género:

Por cada No da Treeview  ->  Chama "Ve nodes todos(Nodeparent)"

SUB Ve nodes todos(Nodeactual)
Se o node actual tiver nodes então - >Chama "Ve nodes todos(Node actual)"
Case não tenha mais nodes,
Por cada No do nodeactual -> Troca a cor

Vão se subindo níveis de nodes até que se chege a um que não tem mais filhos e verifica-se todo esse nível.

Se mesmo assim está complicado, já fiz um exemplo. Posto aqui se quiseres.

Bom.. se existirem exemplos agradecia de facto.. pq já perdi imenso tempo a pesquisar e já só vejo "Nodes" à frente..

tinha:

 For Each t As TreeNode In TreeView1.Nodes 
            For Each c As TreeNode In t.Nodes 
                For Each d As TreeNode In c.Nodes
                    d.ForeColor = Color.Brown  

                Next
            Next
        Next

fazia isto para cada ParentNode mas não funciona..

Edit: Introduzido geshi no código

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom.. se existirem exemplos agradecia de facto.. pq já perdi imenso tempo a pesquisar e já só vejo "Nodes" à frente..

;):)

Funcionar devia funcionar, mas só para o nível 1 e 2.

Ora então aqui vai um exemplo de função recursiva.

Quando se diz que uma função é recursiva, é porque ela se chama literalmente a ela própria.

Implementa, exprimenta e depois de analisares vê lá se percebes o código.

Substituí o código todo de uma form com uma treeview para este:

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Cor As Color = Color.FromArgb(255, 100, 100)

        For Each N As TreeNode In TreeView1.Nodes
            N.ForeColor = cor
            EscavaNodes(N, cor)
        Next
    End Sub

    Private Sub EscavaNodes(ByVal NodeBase As TreeNode, ByVal Cor As Color)
        If NodeBase.Nodes.Count > 0 Then
            For Each N As TreeNode In NodeBase.Nodes
                N.ForeColor = Cor
                EscavaNodes(N, Cor)
            Next
        End If
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Possa!!!  pecebi e funciona 100%%%  :cheesygrin: Muito obrigado! Já me estava a passar com isto..  de facto falhava nuns pontos importantes!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas tu não tens um método para pesquisar em todos os nodes ? Deves estar a utilizar uma função recursiva, como já foi mostrado, para percorrer toda a lista não é verdade ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora