Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Eleкtro en 27 Noviembre 2012, 12:31 pm



Título: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: Eleкtro en 27 Noviembre 2012, 12:31 pm
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!

(http://img515.imageshack.us/img515/9674/prtscrcapturel.jpg)


Título: Re: Cambiar el color de una línea en un richtextbox
Publicado por: Keyen Night en 27 Noviembre 2012, 12:48 pm
Por supuesto el RichTextBox, existe precisamente para esas cosas:

Código
  1.       RichTextBox1.Select(INDEX, LONGITUD)
  2.  
  3.        RichTextBox1.SelectionColor = COLOR
  4.  
  5.        RichTextBox1.Select(0, 0)


Título: Re: Cambiar el color de una línea en un richtextbox
Publicado por: Eleкtro en 27 Noviembre 2012, 13:41 pm
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
  1. consolebox.Find("Processing: ")
  2. consolebox.SelectionColor = Color.Yellow


Saludos!


Título: Re: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: seba123neo en 27 Noviembre 2012, 13:54 pm
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.


Título: Re: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: Eleкtro en 27 Noviembre 2012, 14:04 pm
Pues he probado esto, y ralentiza el proceso sobre un 50% (obviamente cuanto mayor séa el contenido del richtextbox...)

Código
  1.              Dim textEnd As Integer = consolebox.TextLength
  2.                Dim index As Integer = 0
  3.                Dim lastIndex As Integer = consolebox.Text.LastIndexOf("Processing")
  4.  
  5.                While index < lastIndex
  6.                    consolebox.Find("Processing", index, textEnd, RichTextBoxFinds.None)
  7.                    consolebox.SelectionColor = Color.Yellow
  8.                    index = consolebox.Text.IndexOf("Processing", index) + 1
  9.                End While


Título: Re: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: Keyen Night en 27 Noviembre 2012, 14:07 pm
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.


Título: Re: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: seba123neo en 27 Noviembre 2012, 14:24 pm
algo asi:

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.        For i As Integer = 1 To 500
  5.            RichTextBox1.Text += "Linea " & i & vbNewLine
  6.        Next
  7.    End Sub
  8.  
  9.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  10.        For i As Integer = 0 To RichTextBox1.Lines.Length - 1
  11.            Dim first As Integer = RichTextBox1.GetFirstCharIndexFromLine(i)
  12.            RichTextBox1.Select(first, RichTextBox1.Lines(i).Length)
  13.            RichTextBox1.SelectionBackColor = If((i Mod 2 = 0), Color.Red, Color.White)
  14.            RichTextBox1.SelectionColor = If((i Mod 2 = 0), Color.Black, Color.Green)
  15.        Next
  16.    End Sub
  17. End Class

saludos.


Título: Re: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: Eleкtro en 27 Noviembre 2012, 14:24 pm
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
  1.                For line = 0 To consolebox.Lines.Length
  2.                    a = consolebox.GetFirstCharIndexFromLine(line)
  3.                    b = consolebox.Lines(line).Length()
  4.                    MsgBox(a & "," & b)
  5.                    consolebox.Select(a, b)
  6.                    consolebox.SelectionColor = Color.Yellow
  7.                Next


Título: Re: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: kub0x en 27 Noviembre 2012, 14:30 pm
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!


Título: Re: (SOLUCIONADO) Cambiar el color de una línea en un richtextbox
Publicado por: Eleкtro en 27 Noviembre 2012, 14:38 pm

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


Le tuve que restar una más:

Código
  1.                For i As Integer = 0 To consolebox.Lines.Length - 2
  2.                    Dim first As Integer = consolebox.GetFirstCharIndexFromLine(i)
  3.                    '  MsgBox(first)
  4.                    consolebox.Select(first, 10)
  5.                    consolebox.SelectionColor = Color.Yellow
  6.                Next

Listo! Gracias.