Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
in alternativa copia tutto il codice di Carlo, contenuto nel metodo OnDrawNode.
(o in seguito se manca qualche variabile o funzione la aggiungi manualmente. )
non avevo mai usato DrawMode in un controllo standard, e ho provato funziona, il codice completo in VB.Net
Nel form va aggiunta una TreeView e due bottoni.
Codice sorgente - presumibilmente VB.NET
PublicClass Form1
PrivateSub Form1_Load(sender AsObject, e As EventArgs)HandlesMyBase.Load
Grazie ma veramente grazie a tutti... non sapevo proprio come fare e cosa fosse possibile...
un'ultima cosa alla stringa di Carlo: tv.nodes(i).text=" Testo;123; green; red" é possibile dirgli anche che il testo "- 123 -" sia in formato bold?? Forse sto proprio chiedendo troppo!!:
Dipende, se vuoi un colore solo puoi tornare all'esempio originale con le Regex.
Oppure si possono allungare i parametri separati da ;
TreeView1.Nodes.Item(3).Text = " TV scadenza;-123 -;blue;false;red;true"
dove: "TV scadenza" sarebbe scritto in blu nonbold (false)
e: "-123 -" sarebbe scritto in rosso bold (true)
Sul codice nel vettore linea troverai:
linea(0) la prima stringa
linea(1) la seconda stringa
linea(2) colore della prima stringa (red, yellow, green, blue, red, gray)
linea(3) boldatura prima stringa (true or false)
linea(4) colore della seconda stringa (red, yellow, green, blue, red, gray)
linea(5) boldatura seconda stringa (true or false)
Con queste info, il codice deve essere modificato di conseguenza, prova o chiedi.
Dipende, se vuoi un colore solo puoi tornare all'esempio originale con le Regex.
Oppure si possono allungare i parametri separati da ;
TreeView1.Nodes.Item(3).Text = " TV scadenza;-123 -;blue;false;red;true"
dove: "TV scadenza" sarebbe scritto in blu nonbold (false)
e: "-123 -" sarebbe scritto in rosso bold (true)
Sul codice nel vettore linea troverai:
linea(0) la prima stringa
linea(1) la seconda stringa
linea(2) colore della prima stringa (red, yellow, green, blue, red, gray)
linea(3) boldatura prima stringa (true or false)
linea(4) colore della seconda stringa (red, yellow, green, blue, red, gray)
linea(5) boldatura seconda stringa (true or false)
Con queste info, il codice deve essere modificato di conseguenza, prova o chiedi.
Grazie Carlo per ora ho risolto pienamente i due colori realizzando l'evento drawmode ed utilizzando il tuo codice fantastico..
Codice sorgente - presumibilmente VB.NET
PrivateSub TVAtt_drawNode(sender AsObject, e As DrawTreeNodeEventArgs)
volendo fare come dici tu utilizzando la linea(3) e la linea(5) per il bold (True o False) credo che andrebbe passato al font?? ma non me lo prende!! mi dice proprietà readonly..
Grazie di nuovo
Ultima modifica effettuata da alip1 il 27/10/2021 alle 16:55
Dipende, se vuoi un colore solo puoi tornare all'esempio originale con le Regex.
Oppure si possono allungare i parametri separati da ;
TreeView1.Nodes.Item(3).Text = " TV scadenza;-123 -;blue;false;red;true"
dove: "TV scadenza" sarebbe scritto in blu nonbold (false)
e: "-123 -" sarebbe scritto in rosso bold (true)
Sul codice nel vettore linea troverai:
linea(0) la prima stringa
linea(1) la seconda stringa
linea(2) colore della prima stringa (red, yellow, green, blue, red, gray)
linea(3) boldatura prima stringa (true or false)
linea(4) colore della seconda stringa (red, yellow, green, blue, red, gray)
linea(5) boldatura seconda stringa (true or false)
Con queste info, il codice deve essere modificato di conseguenza, prova o chiedi.
Grazie Carlo per ora ho risolto pienamente i due colori realizzando l'evento drawmode ed utilizzando il tuo codice fantastico..
Codice sorgente - presumibilmente VB.NET
PrivateSub TVAtt_drawNode(sender AsObject, e As DrawTreeNodeEventArgs)
ma mi sembra che linea ha solo 4 elementi e non sei ... per cui volendo fare come dici tu utilizzando la linea(3) e la linea(5) per il bold (True o False) credo che andrebbe passato al font?? ma non me lo prende!! credo che andrebbero cambiate anche gli indici delle linee essendo diverse.
Grazie di nuovo
Devi ringraziare Thejuster, io non ci avrei pensato a fare l'override del controllo standard.
Il vettore linea, si autodimensiona in base alla stringa che passi, ogni punto e virgola crea una dimensione, l'ordine di inserimento è a tua cura, l'unica cosa da tenere presente è che la prima stringa deve essere quella principale, in modo che il controllo funzioni anche se viene usato in modo tradizionale.
Questo codice gestisce il bold su ambedue i testi.
tutto come prima ma la nuova stringa non è compatibile con il vecchio codice:
TreeView1.Nodes.Add(" testo1;testo2;colore1;statobold1;colore2;statobold2")
Codice sorgente - presumibilmente VB.NET
PrivateSub TVAtt_drawNode(sender AsObject, e As DrawTreeNodeEventArgs)
Dim g As Graphics = e.Graphics
Dim colore1 As Brush = Brushes.Black
Dim colore2 As Brush = Brushes.Black
Dim linea = e.Node.Text.Split(";"c)
Dim Size As SizeF
If e.Node.Bounds.X= 0 ThenExitSub
If linea.GetUpperBound(0) > 1 Then
SelectCase linea(2).ToLower().Trim()
Case"red"
colore1 = Brushes.Red
Case"gray"
colore1 = Brushes.Gray
Case"green"
colore1 = Brushes.Green
Case"blue"
colore1 = Brushes.Blue
Case"yellow"
colore1 = Brushes.Gold
CaseElse
colore1 = Brushes.Black
EndSelect
If linea.GetUpperBound(0) > 2 AndAlso linea(3).ToLower.Trim="true"Then
Size = g.MeasureString(linea(0), New Font(Font, FontStyle.Bold))
g.DrawString(linea(0), New Font(Font, FontStyle.Bold), colore1, e.Node.Bounds)
Grazie fantastico... mi hai insegnato in un attimo tantissimo veramente grazie a te ma anche agli altri..
Marco scusami volevo farti una ultima domanda ( spero l'ultima):
nella linea di codice (e ovviamente anche nelle altre)
Codice sorgente - presumibilmente C# / VB.NET
g.DrawString(linea(0), New Font(Font, FontStyle.Bold), colore1, e.Node.Bounds)
l'oggetto Font che passi a New Font(Font,...) a quale font si riferisce a quello impostato in progettazione alla TVAtt o ad un font generico.. nel caso potrei scrivere così:
Codice sorgente - presumibilmente C# / VB.NET
g.DrawString(linea(0), New Font(TVATT.Font, FontStyle.Bold), colore1, e.Node.Bounds)