Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Buongiorno a tutti. In vb.net è possibile in qualche modo assegnare alla proprietà text di una treeview una combinazione di 2 stringhe ciascuna di colore diverso? Ad esempio sia TV una treeview e txtcount una stringa Con TV.tag=" In Scadenza " txtcount = " - 123 - " Supponiamo di vole fare qualcosa del genere: TV.text = TV.tag & txtCount Il valore text della TV sarà : In Scadenza -123 - Ovviamente tutto il valore della TV.text sarà quello previsto. Ora il mio obiettivo sarebbe quello di poter far vedere - 123 - con un colore diverso diciamo rosso lasciando il resto col colore previsto. Spero di essermi spiegato. E' possibile farlo in qualche modo? Grazie a tutti
Ultima modifica effettuata da alip1 il 19/10/2021 alle 11:00
Le proprietà Text di una TreeView, possono avere un colore di primopiano e un colore di fondo.
Nativamente non si possono mescolare i colori in un unica Text.
In VB.Net, il programmatore può intervenire sul disegno di un oggetto, intercettando le funzioni di disegno e cambiandone le proprietà mentre questo viene eseguito, ti devi studiare CustomDraw.
Non sto a spiegarti tutti i procedimenti, perché la personalizzazione dei controlli è un argomento vastissimo.
Parto dalla cosa più semplice.
Per ottenere quell'effetto sul link esempio che ha postato @Carlo Viene misurata la lunghezza della stringa in base al font utilizzato, per poi eseguire un DrawText alle giuste coordinate.
Te lo scrivo in C# poi magari te lo traduci con i diversi traduttori online disponibili.
Per prima cosa devi creare un nuovo controllo ereditando la classe TreeView.
In seguito fare un override del DrawNodeItem.
in questo esempio, utilizzando un tag html, tipo <bold>Test</bold> te lo colora di rosso ed in grassetto.
Ma puoi modificare come meglio credi.
Ricordo che è un esempio rozzo, e non completo. Ma che ti serva di spunto per realizzare il tuo controllo.
al testo di un singolo nodo aggiungi esempio
Codice sorgente - presumibilmente Plain Text
" TV Scadenza <bold>123</bold> "
Classe di esempio che ti ho scritto
Codice sorgente - presumibilmente C#
publicclass treetest : TreeView
{
public treetest()
{
DrawMode = TreeViewDrawMode.OwnerDrawText;//Imposto la modalità di disegno variabile
Non sto a spiegarti tutti i procedimenti, perché la personalizzazione dei controlli è un argomento vastissimo.
Parto dalla cosa più semplice.
Per ottenere quell'effetto sul link esempio che ha postato @Carlo Viene misurata la lunghezza della stringa in base al font utilizzato, per poi eseguire un DrawText alle giuste coordinate.
Te lo scrivo in C# poi magari te lo traduci con i diversi traduttori online disponibili.
Per prima cosa devi creare un nuovo controllo ereditando la classe TreeView.
In seguito fare un override del DrawNodeItem.
in questo esempio, utilizzando un tag html, tipo <bold>Test</bold> te lo colora di rosso ed in grassetto.
Ma puoi modificare come meglio credi.
Ricordo che è un esempio rozzo, e non completo. Ma che ti serva di spunto per realizzare il tuo controllo.
al testo di un singolo nodo aggiungi esempio
Codice sorgente - presumibilmente Plain Text
" TV Scadenza <bold>123</bold> "
Classe di esempio che ti ho scritto
Codice sorgente - presumibilmente C#
publicclass treetest : TreeView
{
public treetest()
{
DrawMode = TreeViewDrawMode.OwnerDrawText;//Imposto la modalità di disegno variabile
g.DrawString(bold,new Font(Font.FontFamily,Font.Size, FontStyle.Bold), Brushes.Red, new PointF(e.Node.Bounds.X+ regSize.Width+ 2, e.Node.Bounds.Y));
}
}
Grazie. Scusami ma una volta realizzata questa classe come faccio a fare in modo che il text di alcuni nodi cambino??? questo passaggio non lo trovo nell'esempio. Grazie per la cortesia.
Quando aggiungi uno nodo, alla proprietà Text cioè quando gli da un testo da visualizzare inserisci <bold>Testo</bold> per colorare ti ho scritto l'esempio....
TV Scadenza <bold>123</bold>
Edit:
PS, è comunque un controllo nuovo, e non devi utilizzare il classico TreeView.
Apparirà a sinistra nella casella degli strumenti dove sono contenuti i controlli, il tuo nuovo controllo chiamato con il nome della classe.
Devi trascinare quello nel form e non il TreeView classico di Visual Studio.
Ultima modifica effettuata da Thejuster il 25/10/2021 alle 9:46
I colori usabili per colore1 o colore2 sono: red, blue, yellow, gray, green
Per discriminare i campi nel testo nel nodo deve essere usato il separatore ;
Se i colori vengono omessi la stringa non viene stampata, se i colori sono sbagliati viene usato il nero.
Per esempio se si crea il nodo così:
Treetest1.Nodes.Add(" testo1;testo2; ; red") il testo1 sarà nero e il testo2 sarà rosso
Anche i nodi figli funzioneranno.
Anche se cambi il testo funziona:
Treetest1.Nodes.Item(3).Text = " xx;yy;green ;red "
Qui in allegato una foto del programma test in funzione.
Nel prossimo post lo zip con il progetto e l'eseguibile.
Il programma l'ho realizzato usando l'esempio di @Thejuster, ho solo eliminato le regular expression, e corretto alcune visualizzazioni errate che incorrevano se aggiungevi più nodi che portavano a visualizzare i testi in posti sbagliati perché le coordinate non erano ancora disponibili.
Il programma lo puoi modificare a piacere ed aggiungere tutti i colori che vuoi. è in VB .Net
Grazie Carlo e Grazie a tutti... vedrò i vs suggerimenti e progetti e cercherò di farli miei.
Anche se ho il form già predisposto a livello di progettazione e già con tutti gli eventi e le funzionalità realizzate...
Ho paura ora di togliere la TreeView presa dai controlli e progettata secondo le mie necessità... In verità i nodi sono stati già progettati con tutte le loro caratteristiche icone comprese... e fa parte di un contenitore.. A livello di codice aggiungo dinamicamente solo i nodifigli necessari (presi da una tabella db) ed aggiunti al nodo radice node(0). Dinamicamente agli altri nodi cambio solo la proprietà text a cui aggiungo una stringa del tipo "- 123 -" e avrei voluto poterla farla vedere in colore rosso e in grassetto..
Ma secondo voi utilizzando l'evento paint della treeview non è proprio possibile farlo utilizzando parzialmente quanto da voi realizzato?
Cmq siete grandi, vorrei saper fare quanto voi.
Grazie di nuovo a tutti
Fossi in te procederei in questo modo.
1) copia la cartella di progetto in un altro percorso
2) apri il nuovo progetto copiato
3) aggiungi una nuova classe (treetest.vb) sul nuovo progetto, come da mio esempio
4) compila il nuovo progetto per far apparire tra gli strumenti treetest
5) rimuovi dal form la treeview originale
6) trascina nel form treetest
7) apri il vecchio progetto non modificato, in un nuovo VS
8) in progettazione del vecchio progetto, controlla tutte le proprietà della treeview originale
9) sempre in progettazione del nuovo progetto, copia tutte le proprietà della treeview originale in treetest: Name, Location, Size, Anchor, Font, ecc, ecc
10) fai la stessa cosa con gli eventi, iconcina a forma di fulmine nella stessa finestra delle proprietà.
11) lancia il programma e tutto dovrebbe funzionare come prima.
quando vorrai i colori invece di scrivere la stringa .Text = " TV scadenza - 123 -"
scrivi .Text = " TV scadenza;- 123 -;black;red"
Se sei soddisfatto, archivia il vecchio progetto, non lo cancellare.
Se non sei soddisfatto torna al progetto originale.
Ultima modifica effettuata da Carlo il 27/10/2021 alle 12:39