(SOLUCIONADO) Cambiar el color de una línea en un richtextbox

Iniciado por Eleкtro, 27 Noviembre 2012, 12:31 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Pues eso, ¿Sería posible cambiar el color de UNA sola línea de este richtextbox para que la línea de "Processing: ..." saliera en amarillo por ejemplo?

Y otra pregunta relacionada, ¿Sería posible cambiar solamente UNA palabra de color?

Agradezco cualquier información!









Keyen Night

Por supuesto el RichTextBox, existe precisamente para esas cosas:

Código (vb.net) [Seleccionar]
       RichTextBox1.Select(INDEX, LONGITUD)

        RichTextBox1.SelectionColor = COLOR

        RichTextBox1.Select(0, 0)
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Eleкtro

Gracias Keyen, ese método solo sirve para seleccionar un rango select(A, B), estaría bien si se pudiera indicar el inicio de la línea select(Linea, A, B), pero a menos que idee la forma de sumar cuando mide cada string que voy insertando en el richtextbox... en fin, mucho consumo de tiempo y de proceso para mi app, así que lo dejo así:

Código (vbnet) [Seleccionar]
consolebox.Find("Processing: ")
consolebox.SelectionColor = Color.Yellow



Saludos!








seba123neo

no es dificil,tenes que hacer un simple For de 0 hasta Lines.Length y ahi dentro usar GetFirstCharIndexFromLine, eso te devuelve el inicio de la linea y con richTextBox1.Lines(i).Length te devuelve el final de la linea, esos 2 valores se lo pones al .Select() y listo.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Eleкtro

Pues he probado esto, y ralentiza el proceso sobre un 50% (obviamente cuanto mayor séa el contenido del richtextbox...)

Código (vbnet) [Seleccionar]
              Dim textEnd As Integer = consolebox.TextLength
                Dim index As Integer = 0
                Dim lastIndex As Integer = consolebox.Text.LastIndexOf("Processing")

                While index < lastIndex
                    consolebox.Find("Processing", index, textEnd, RichTextBoxFinds.None)
                    consolebox.SelectionColor = Color.Yellow
                    index = consolebox.Text.IndexOf("Processing", index) + 1
                End While








Keyen Night

Has lo que dice seba123neo, el For solo dará tantas vueltas como lineas tenga el RichTextBox, será más rápido que el código que tienes actualmente.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

seba123neo

algo asi:

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 1 To 500
            RichTextBox1.Text += "Linea " & i & vbNewLine
        Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For i As Integer = 0 To RichTextBox1.Lines.Length - 1
            Dim first As Integer = RichTextBox1.GetFirstCharIndexFromLine(i)
            RichTextBox1.Select(first, RichTextBox1.Lines(i).Length)
            RichTextBox1.SelectionBackColor = If((i Mod 2 = 0), Color.Red, Color.White)
            RichTextBox1.SelectionColor = If((i Mod 2 = 0), Color.Black, Color.Green)
        Next
    End Sub
End Class


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Eleкtro

#7
EDITO: te me adelantaste Seba, ahora lo pruebo!

EDITO2: Tu ejemplo selecciona lineas enteras, yo necesito seleccionar la palabra "Processing" de cada linea

EDITO3: Ya está, como la palabra "Processing" empieza al principio de cada línea solo tengo que medir la longitud de la palabra y usarla como "final de índice" xD

GRACIAS




Me dice que el ínidce está fuera de la matriz, que lío:
Código (vbnet) [Seleccionar]

               For line = 0 To consolebox.Lines.Length
                   a = consolebox.GetFirstCharIndexFromLine(line)
                   b = consolebox.Lines(line).Length()
                   MsgBox(a & "," & b)
                   consolebox.Select(a, b)
                   consolebox.SelectionColor = Color.Yellow
               Next








kub0x

EleKtro,

al parecer evaluas una línea mas que realmente no tienes.

0 .. lines.length - 1 sería la manera correcta de recorrer el array.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Eleкtro

#9
Cita de: kub0x en 27 Noviembre 2012, 14:30 PM

0 .. lines.length - 1 sería la manera correcta de recorrer el array.


Le tuve que restar una más:

Código (vbnet) [Seleccionar]
               For i As Integer = 0 To consolebox.Lines.Length - 2
                   Dim first As Integer = consolebox.GetFirstCharIndexFromLine(i)
                   '  MsgBox(first)
                   consolebox.Select(first, 10)
                   consolebox.SelectionColor = Color.Yellow
               Next


Listo! Gracias.