Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB.NET]Colorare testo in RichTextBox

    Ho un ciclo che mi serve per inserire del testo in una RichTextBox e, diciamo che ogni riga che inserisco vorrei colorarla con un certo colore, es.:

    codice:
    Dim testo As String = "ciaociaocicoaicocoasofs"
    
          RichTextBox1.Text = ""
    
          For i As Integer = 0 To 10
                RichTextBox1.Text &= testo & vbNewLine
    
                RichTextBox1.Select(RichTextBox1.Text.Length, testo.Length)
    
                RichTextBox1.SelectionColor = Color.FromArgb(Color.Orange.ToArgb + (i * 5000))
            Next
    solo che così mi colora tutto dello stesso colore. Dov'è che sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200

    Re: [VB.NET]Colorare testo in RichTextBox

    [b]
    ...solo che così mi colora tutto dello stesso colore. Dov'è che sbaglio?
    Prima di tutto ti consiglio di usare la Appendtext quindi di usare questo codice che dovrebbe funzionare:


    Dim testo As String = "ciaociaocicoaicocoasofs"
    Dim testolength As Integer = testo.Length
    Dim Start As Integer = 0

    RichTextBox1.Text = ""

    For i As Integer = 0 To 10
    Start = (testolength + 1) * i
    RichTextBox1.AppendText(testo & vbCrLf)
    RichTextBox1.Select(Start, testo.Length)
    RichTextBox1.SelectionBackColor = Color.FromArgb(Color.Orange.ToArgb + (i * 5000))
    Next



    Credo che leggendolo capirai perchè il tuo codice non poteva funzionare, in particolare:

    1) Come primo parametro del metodo Select è richiesto la posizione iniziale della selezione
    2) Nel secondo parametro (lunghezza del testo), non consideri il byte per il ritorno a capo.


    Ciao.

  3. #3
    Per il codice di esempio che ho postato funzionano le tue correzioni, adesso devo applicarlo al mio caso reale, che,per me, è più rompi...

    Lo posto qualora qualcuno possa dirmi dov'è che sbaglio:
    codice:
      Do While DataReader.Read()
      If Trovato = trueThen                   
                            testo = "Trovato:"
    
                            testolength = testo.Length
                            Start = (testolength + 1) * count
    
                            EsitoRicerca.AppendText(testo & vbCrLf)
                            EsitoRicerca.Select(Start, testo.Length)
                            EsitoRicerca.SelectionColor = Color.Blue
    
                            testo = "Si"
                            testolength = testo.Length
                            Start = (testolength + 1) * count
    
                            EsitoRicerca.AppendText(testo & vbCrLf)
                            EsitoRicerca.Select(Start, testo.Length)
                            EsitoRicerca.SelectionColor = Color.Green
    
                        Else
                            testo = "Trovato"
                            testolength = testo.Length
                            Start = (testolength + 1) * count
    
                            EsitoRicerca.AppendText(testo & vbCrLf)
                            EsitoRicerca.Select(Start, testo.Length)
                            EsitoRicerca.SelectionColor = Color.Blue
    
                            testo = "NO"
                            testolength = testo.Length
                            Start = (testolength + 1) * count
    
                            EsitoRicerca.AppendText(testo & vbCrLf)
                            EsitoRicerca.Select(Start, testo.Length)
                            EsitoRicerca.SelectionColor = Color.Red
                        End If
    count += 1
    Loop
    Così mi colora tutto il testo con il colore presente nell'ultimo if in cui entra.


  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Originariamente inviato da mardok30
    Per il codice di esempio che ho postato funzionano le tue correzioni, adesso devo applicarlo al mio caso reale, che,per me, è più rompi...


    Così mi colora tutto il testo con il colore presente nell'ultimo if in cui entra.

    Ma figliolo, se non tenti di entrare nella logica di programmazione e chiedi solo il codice per risolvere il problema non diventerai mai un vero programmatore. Conoscere come funzionano i controlli o le classi non fanno di una persona un programmatore.

    Detto questo devo chiederti: perchè non vai subito al sodo senza tante circonlocuzioni?
    Il problema da te posto inizialmente è diverso da quello che propono adesso.
    Comunque, se ho capito quel che vuoi ottenere il codice và così corretto in quanto è evidente che non ti è ancora chiaro perchè Start viene calcolato in quel modo.

    Do While DataReader.Read()
    If Trovato = trueThen
    testo = "Trovato:"

    testolength = testo.Length

    Start = EsitoRicerca.length

    EsitoRicerca.AppendText(testo & vbCrLf)
    EsitoRicerca.Select(Start, testo.Length)
    EsitoRicerca.SelectionColor = Color.Blue

    testo = "Si"
    testolength = testo.Length

    Start = EsitoRicerca.length


    EsitoRicerca.AppendText(testo & vbCrLf)
    EsitoRicerca.Select(Start, testo.Length)
    EsitoRicerca.SelectionColor = Color.Green

    Else
    testo = "Trovato"
    testolength = testo.Length

    Start = EsitoRicerca.length

    EsitoRicerca.AppendText(testo & vbCrLf)
    EsitoRicerca.Select(Start, testo.Length)
    EsitoRicerca.SelectionColor = Color.Blue

    testo = "NO"
    testolength = testo.Length

    Start = EsitoRicerca.length

    EsitoRicerca.AppendText(testo & vbCrLf)
    EsitoRicerca.Select(Start, testo.Length)
    EsitoRicerca.SelectionColor = Color.Red
    End If
    count += 1
    Loop


    Ciao.

  5. #5
    Innanzitutto grazie per avermi aiutato.

    Ma figliolo, se non tenti di entrare nella logica di programmazione e chiedi solo il codice per risolvere il problema non diventerai mai un vero programmatore. Conoscere come funzionano i controlli o le classi non fanno di una persona un programmatore.
    Ci tengo a precisare che non amo ricevere il codice bello e pronto, ma di solito ci ragiono da solo. In questo caso, non conoscendo bene come funziona la SelectionStart e le varie lenght e non avendo la mente lucida e fresca per ragionarci ho chiesto aiuto al forum. In altri momenti sarei potuto arrivarci anche da solo(o almeno lo spero per me, visto che non ci voleva molto...)
    Detto questo devo chiederti: perchè non vai subito al sodo senza tante circonlocuzioni?
    Perché di solito quando si fanno dei 3d lunghi e noiosi chi legge può non concludere la lettura, quindi ho pensato di semplificare la questione. Anche se mi rendo conto quanto i due casi possano essere diversi.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Originariamente inviato da mardok30
    Ci tengo a precisare che non amo ricevere il codice bello e pronto, ma di solito ci ragiono da solo.
    Non credo ci sia nulla di male a chiedere del codice già pronto se si tratta di qualche funzione particolare già messa a disposizione da qualcuno oppure di qualche istruzione la cui sintassi non è nota.
    Quì però il problema era di semplicissima soluzione e se pur nel primo esempio capisco che il problema era dovuto ad una mancanza di conoscienza del significato dei parametri della Select, mi sarei aspettato che dopo aver visto la corretta soluzione al tuo primo quesito fosse assolutamente tutto abbastanza chiaro per ottenere quanto chiedevi.

    Ma al di là di questo, devo ammettere che quando ho visto quel codice mi è corso un brivido dietro la schiena. Per favore, cerca di fare una subroutine che accetta una stringa qualsiasi in input ed automaticamente la inserisce con la giusta colorazione nella tua richtextbox. In questo modo contribuirai a fornire al tuo programma caratteristiche di analizzabilità e manutenibilità. In poche parole avrai un programma più leggibile, senza ridondanze e facilmente implementabile per via della modularità che vai via vai fornendogli.

    Un consiglio veloce: cerca di non appesantire la struttura condizionale. Fa in modo che contenga il minor numero di istruzioni (utilizzando quindi delle subroutines che sostituiscono la struttura di "sequenza").

    Nel tuo caso, la ridondanza delle istruzioni salta subito all'occhio.

    Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.