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)
Por supuesto el RichTextBox, existe precisamente para esas cosas:
RichTextBox1.Select(INDEX, LONGITUD)
RichTextBox1.SelectionColor = COLOR
RichTextBox1.Select(0, 0)
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í:
consolebox.Find("Processing: ")
consolebox.SelectionColor = Color.Yellow
Saludos!
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.
Pues he probado esto, y ralentiza el proceso sobre un 50% (obviamente cuanto mayor séa el contenido del richtextbox...)
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
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.
algo asi:
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.
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:
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
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!
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:
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.