Jump to content
almamater

Treeview - Mudar a cor

Recommended Posts

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

Share this post


Link to post
Share on other sites
Weasel

Já experimentaste fazer:

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


Knowledge to the masses


Share this post


Link to post
Share on other sites
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.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
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á!

Share this post


Link to post
Share on other sites
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.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
almamater

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

Share this post


Link to post
Share on other sites
ribeiro55

Marca como resolvido carregando em "Topic solved"


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
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 ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.