Ir para o conteúdo
almamater

Treeview - Mudar a cor

Mensagens Recomendadas

almamater    0
almamater

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
almamater    0
almamater

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á!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
almamater    0
almamater

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
almamater    0
almamater

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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 ?

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade