Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Text di un nodo di una treeview in colori diversi
Forum - C# / VB.NET - Text di un nodo di una treeview in colori diversi - Pagina 4

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 15:35
Venerdì, 29/10/2021
Fantastico... Grazie Marco.
un'ultimissima cosa ma spero proprio l'ultima.
il mio primo nodo indice 0 ha tre sottonodi.. se non clicco sul nodo i sottonodi non si vedono vorrei poterli farli vedere subito.
tieni presente che tutti i nodi sono già realizzati a livello di progettazione mentre a livello di codice al load del form carico i sottonodi del nodo di indice 0 ( e i sotto nodi possono essere anche + di 1)
ora dopo averli caricati ho fatto così:
Codice sorgente - presumibilmente Plain Text

  1. TVAtt.Nodes(0).Text = "Di Gruppo; ;white;true;white;true"
  2.          TVAtt.Nodes(0).ExpandAll()


ma il nodo rimane non espanso e nemmeno il colore di selezione bianco su blu si realizza. Quando clicco sul nodo è tutto ok.
Secondo te come mai il nodo non si espande? Ho controllato la proprietà expanded del nodo e risulta true ma il nodo rimane chiuso.
Grazie come sempre.:pat:

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:00
Venerdì, 29/10/2021
Non so se quando ti riferisci a Marco, ti riferisci a me.

A me funziona, prova anche questa per espandere il primo nodo:

TVAtt.Nodes.Item(0).Expand()

hai provato a lanciare l'istruzione con un button, per essere certo che non venga eseguita troppo presto?
prova ad inserire application.doevents

Codice sorgente - presumibilmente Plain Text

  1. TVAtt.Nodes.Item(0).Text = " TV scadenza;-123-;green;;red;true"
  2. Application.DoEvents()
  3. TVAtt.Nodes.Item(0).Expand()


Ultima modifica effettuata da Carlo il 29/10/2021 alle 16:09


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 16:09
Venerdì, 29/10/2021
Scusami Carlo é che ho un nipotino di nome Marco... :pat:

Ultima modifica effettuata da alip1 il 29/10/2021 alle 16:10
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 19:24
Venerdì, 29/10/2021
Testo quotato

Postato originariamente da Carlo:

Non so se quando ti riferisci a Marco, ti riferisci a me.

A me funziona, prova anche questa per espandere il primo nodo:

TVAtt.Nodes.Item(0).Expand()

hai provato a lanciare l'istruzione con un button, per essere certo che non venga eseguita troppo presto?
prova ad inserire application.doevents

Codice sorgente - presumibilmente Plain Text

  1. TVAtt.Nodes.Item(0).Text = " TV scadenza;-123-;green;;red;true"
  2. Application.DoEvents()
  3. TVAtt.Nodes.Item(0).Expand()



Grazie Carlo
ho fatto come dici ma il nodo rimane non espanso a meno che non faccio cli col mouse sul nodo.. non capisco perché il nodo risulta ache con isselected=true

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 20:01
Venerdì, 29/10/2021
se lo fai nel mio esempio funziona?


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 19:37
Domenica, 31/10/2021
Grazie Carlo
Si in effetti nel tuo mi funziona non so nel mio perché no. Devo capire in quale momento devo farlo, perché in pratica il TVAtt é realizzato in sede di progetto.
A livello di codice carico i sottonodi del primo nodo radice (indice 0) e questo è l'unico che di fatto ha sotto nodi.
Poi carico i dati dal db calcolo i valori a seconda dei filtri che verranno operati e quindi si posiziona sul nodo di indice 0 e visualizza i dati relativi nella listview a lato ..il fatto é che pur posizionando su primo nodo vorrei che esso si espandesse perché l'utente possa vedere i nodi sottostanti senza dover cliccare sul nodo per espanderlo...
Vedrò di capire, non vorrei che andasse settata qualche altra proprietà che non so..
Comunque grazie a te e a Thejuster ho imparato tantissimo.. grazie di nuovo
un buon lavoro a tutti voi

PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 11:08
Martedì, 02/11/2021
Problematica risolta...
avevo lasciato in giro un collapse che avveniva dopo l'espand... per cui il nodo si chiudeva:pat:
Grazie a tutti voi per quanto mi avete insegnato sulla TreeView
Buon Lavoro a tutti

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:16
Martedì, 02/11/2021
Bene, ho rivisto il codice e si vede che è fatto di fretta, ho messo una function, e quando si ridisegna in default, non vengono controllati inutilmente i parametri, lo stesso se il testo è selezioato, non vengono inutilmente scelti i colori.
Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  3.         TVAtt.DrawMode = TreeViewDrawMode.OwnerDrawText
  4.         AddHandler TVAtt.DrawNode, AddressOf TVAtt_drawNode
  5.         '' treeview, fondo bianco scritte nere
  6.         'TVAtt.BackColor = Color.White
  7.         'TVAtt.LineColor = Color.Gray
  8.         'TVAtt.ForeColor = Color.Black
  9.         ' tree view, fondo grigio scritte bianche
  10.         TVAtt.BackColor = Color.FromArgb(60, 60, 60)
  11.         TVAtt.LineColor = Color.Gray
  12.         TVAtt.ForeColor = Color.White
  13.         TVAtt.HideSelection = False ' la selezione sarà visible anche quando la Treeview o il form perde il fuoco
  14.     End Sub
  15.  
  16.     Private Sub TVAtt_drawNode(sender As Object, e As DrawTreeNodeEventArgs)
  17.  
  18.         If e.Node Is Nothing Then Exit Sub ' inutile ma per sicurezza...
  19.         Dim selected = e.State And TreeNodeStates.Selected
  20.         Dim g As Graphics = e.Graphics
  21.         Dim colore1 As Brush = New SolidBrush(TVAtt.ForeColor)
  22.         Dim colore2 As Brush = New SolidBrush(TVAtt.ForeColor)
  23.         Dim linea = e.Node.Text.Split(";"c)
  24.         Dim Size As SizeF
  25.  
  26.         ' se c'è un solo parametro oppure le coordinate non sono aggiornate
  27.         If linea.GetUpperBound(0) = 0 Or e.Node.Bounds.X = 0 Then
  28.             e.DrawDefault = True
  29.             Exit Sub
  30.         End If
  31.  
  32.         ' interpretazione dei parametri 0, 2 e 3
  33.         If linea.GetUpperBound(0) > 1 Then
  34.             If selected Then
  35.                 colore1 = New SolidBrush(Color.White) ' colore del testo1 se selezionato
  36.                 ' colore di fondo della selezione
  37.                 e.Graphics.FillRectangle(Brushes.DarkBlue, e.Node.Bounds.X, e.Node.Bounds.Y, e.Node.Bounds.Width, e.Node.Bounds.Height)
  38.             Else
  39.                 colore1 = sceglicolore(linea(2)) ' colore del testo 1 non selezionato
  40.             End If
  41.             If linea.GetUpperBound(0) > 2 AndAlso linea(3).ToLower.Trim = "true" Then
  42.                 Size = g.MeasureString(linea(0), New Font(TVAtt.Font, FontStyle.Bold))
  43.                 g.DrawString(linea(0), New Font(TVAtt.Font, FontStyle.Bold), colore1, e.Node.Bounds)
  44.             Else
  45.                 Size = g.MeasureString(linea(0), TVAtt.Font)
  46.                 g.DrawString(linea(0), TVAtt.Font, colore1, e.Node.Bounds)
  47.             End If
  48.         End If
  49.  
  50.         ' interpretazione dei parametri 1, 4 e 5
  51.         If linea.GetUpperBound(0) > 3 Then
  52.             If selected Then
  53.                 colore2 = New SolidBrush(Color.White) ' colore del testo2 se selezionato
  54.             Else
  55.                 colore2 = sceglicolore(linea(4)) ' colore del testo 2 non selezionato
  56.             End If
  57.             If linea.GetUpperBound(0) > 4 AndAlso linea(5).ToLower.Trim = "true" Then
  58.                 g.DrawString(linea(1), New Font(TVAtt.Font, FontStyle.Bold), colore2, e.Node.Bounds.X + Size.Width + 2, e.Node.Bounds.Y)
  59.             Else
  60.                 g.DrawString(linea(1), TVAtt.Font, colore2, e.Node.Bounds.X + Size.Width + 2, e.Node.Bounds.Y)
  61.             End If
  62.         End If
  63.  
  64.     End Sub
  65.  
  66.     Private Function sceglicolore(colore As String) As Brush
  67.         Select Case colore.ToLower.Trim
  68.             Case "red"
  69.                 Return Brushes.Red
  70.  
  71.             Case "gray"
  72.                 Return Brushes.Gray
  73.  
  74.             Case "green"
  75.                 Return Brushes.LightGreen
  76.  
  77.             Case "blue"
  78.                 Return Brushes.RoyalBlue
  79.  
  80.             Case "yellow"
  81.                 Return Brushes.Gold
  82.  
  83.             Case "cyan"
  84.                 Return Brushes.Cyan
  85.  
  86.             Case "magen"
  87.                 Return Brushes.Magenta
  88.  
  89.             Case "orange"
  90.                 Return Brushes.Orange
  91.  
  92.             Case Else
  93.                 Return New SolidBrush(TVAtt.ForeColor)
  94.         End Select
  95.     End Function
  96.  
  97.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  98.         Dim treeNode1 As New TreeNode("PrimoNodo ")
  99.         treeNode1.Nodes.Add(" testo1Arancio;testo2Giallo;orange;true;yellow;true")
  100.         treeNode1.Nodes.Add(" testo1Rosso;testo2Blue;red;;blue;true")
  101.         treeNode1.Nodes.Add(" testo1Nero;testo2Grigio;black;true;gray;")
  102.         TVAtt.Nodes.Add(treeNode1)
  103.  
  104.         Dim treeNode2 As New TreeNode("SecondoNodo ")
  105.         treeNode2.Nodes.Add(" testo1Verde;testo2Giallo;green;;yellow;")
  106.         treeNode2.Nodes.Add(" testo1Rosso;testo2Blue;red;true;blue;")
  107.         treeNode2.Nodes.Add(" testo1Nero;testo2Grigio;black;;gray;true")
  108.         TVAtt.Nodes.Add(treeNode2)
  109.  
  110.         TVAtt.Nodes.Add(" testoStandard")
  111.         TVAtt.Nodes.Add(" testoStandard")
  112.  
  113.         Dim treeNode3 As New TreeNode("TerzoNodo ")
  114.         treeNode3.Nodes.Add(" Testo;123;cyan;;red;")
  115.         treeNode3.Nodes.Add(" Testo;456;cyan;;red;True")
  116.         treeNode3.Nodes.Add(" Testo;789;cyan;;red;True")
  117.         Dim treeNode4 As New TreeNode("QuartoNodo ")
  118.         treeNode4.Nodes.Add(" testo1Verde;testo2Giallo;green;true;yellow;true")
  119.         treeNode4.Nodes.Add(" testo1Rosso;testo2Nero;red;;black;true")
  120.         treeNode4.Nodes.Add(" testo1Magenta;testo2Arancio;magen;true;orange;")
  121.         treeNode3.Nodes.Add(treeNode4)
  122.         TVAtt.Nodes.Add(treeNode3)
  123.  
  124.     End Sub
  125.  
  126.     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  127.         If TVAtt.Nodes.Count > 2 Then
  128.             TVAtt.Nodes.Item(4).Nodes(3).Text = " TV scadenza;-123-;green;;red;true"
  129.             TVAtt.Nodes.Item(4).ExpandAll()
  130.         End If
  131.     End Sub
  132. End Class


Ultima modifica effettuata da Carlo il 02/11/2021 alle 14:22


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo