Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)
Autor
|
Tema: Ayuda con colores RichTextBox (Leído 5,344 veces)
|
Braayhaan
Desconectado
Mensajes: 224
|
Bueno acá esto pidiendoles ayuda de nuevo xD
Necesito que en un Richtextbox se muestre el texto de distintos colores por ejemplo.
Como el GeSHi de este foro que muestra distintos colores segun el texto.
hay alguna manera de hacerlo?
Todo esto en el VB.NET Claro
Saludos!
|
|
|
|
« Última modificación: 4 Septiembre 2009, 16:49 por BlazeFire »
|
En línea
|
|
|
|
|
seba123neo
|
RichTextBox1.SelectionStart = RichTextBox1.Find("Palabra") RichTextBox1.SelectionColor = Color.Yellow ' El color que quieras
|
|
|
|
|
En línea
|
Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo. Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
|
|
|
Braayhaan
Desconectado
Mensajes: 224
|
Me imagino que eso va en el Rich, o quizás en un timer pero me dice error. Me dice algo de error valuetype-1 is no correct, o algo del value-1, alguna idea? echame una mano seba! 
|
|
|
|
« Última modificación: 3 Septiembre 2009, 05:22 por BlazeFire »
|
En línea
|
|
|
|
Braayhaan
Desconectado
Mensajes: 224
|
Bueno aca les dejo el source haber si me echan una mano ya que no entendi muy bien lo que puso el seba  me da error Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If RichTextBox1.Text = "" Then MessageBox.Show("No se puede compilar un texto vacio") Return End If If SaveFileDialog1.ShowDialog = DialogResult.OK Then RichTextBox1.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) ProgressBar1.Visible = True Timer1.Start() End If Form1.ActiveForm().Text() = "Batch Creator" + SaveFileDialog1.FileName End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If OpenFileDialog1.ShowDialog = DialogResult.OK Then RichTextBox1.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If Form1.ActiveForm().Text() = "Batch Creator" + OpenFileDialog1.FileName End Sub Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ProgressBar1.Increment(10) If ProgressBar1.Value = ProgressBar1.Maximum Then Timer1.Stop() MessageBox.Show("Se ha creado satisfactoriamente el archivo .bat en la direccion especificada") ProgressBar1.Value = ProgressBar1.Minimum ProgressBar1.Visible = False Return End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If RichTextBox1.Text = "" Then MessageBox.Show("Ya hay un nuevo documento abierto") Return End If Form2.Show() End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Form3.SHOW() End Sub Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged End Sub End Class
|
|
|
|
|
En línea
|
|
|
|
|
seba123neo
|
vos preguntaste como se colorea el texto, yo te respondi eso, pero despues no se que hiciste  , el codigo que puse busca "Palabra" en el Richtextbox y lo colorea de amarillo. tambien podes hacerlo con SelectionStart y con SelectionLenght diciendole que desde la posicion 10 hasta la 15 sea de color rojo, de la 16 a la 20 sea azul y asi...ahi en ese codigo que pusiste no veo nada de eso. y no se donde te tira el error. igualmente yo le cambiaria varias cosas a ese codigo. saludos.
|
|
|
|
|
En línea
|
Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo. Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
|
|
|
Braayhaan
Desconectado
Mensajes: 224
|
Ese codigo para colorear lo puse en el richtextbox y me da error Hay les dejo el error que me tira.  No se que es y al darle a detalles aparecen como 100 lineas con cosas raras  Help me Please 
|
|
|
|
|
En línea
|
|
|
|
Braayhaan
Desconectado
Mensajes: 224
|
mmm bueno hasta ahora lo resolvi Asi RichTextBox1.Find("@") RichTextBox1.SelectionColor = System.Drawing.Color.YellowPero a cada rato que escribo algo se me devuelve a la primera linea me imagino que por eso del .Find Alguna forma de que lo chequee pero que me deje escribir normal? Thanks
|
|
|
|
|
En línea
|
|
|
|
|
Zzombi
|
lo otro que podrias hacer es que cuando el richtextbox pierda el foco que se pinte el arroba "@" de color rojo Private Sub RichTextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.LostFocus RichTextBox1.Find("@") RichTextBox1.SelectionColor = Color.Red End Sub
|
|
|
|
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 315
Nothing
|
Mira yo tengo la solución a ese problema xD yo tambien lo tube pero luego me dio flojera continuar un bat maker que estaba haciendo tambien; suponiendo que tu RichTextBox se llamará r así como el mio mira el evento TextChanged Private Sub r_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles r.TextChanged If r.Find("@echo") <> -1 Then r.SelectionStart = r.Find("@echo") r.SelectionColor = Color.Red r.SelectionStart = r.TextLength End If End Sub
|
|
|
|
|
En línea
|
|
|
|
Braayhaan
Desconectado
Mensajes: 224
|
Keyen Night me funciono perfecto el ejemplo pero el detalle es este: si escribo en la primera linea @ o ECHO o Off solo me marca el primer texto escrito por ejemplo si escribi @ me marca en rojo y si despues de @ escribo ECHO me sigue marcando en rojo,Cuando el codigo de ECHO Es azul y deberia marcar el @ en rojo y el ECHO en Azul. Pero si doy enter y paso a la siguiente linea me pone el color del Richtextbox original. Entonces haber si me ayudan 
|
|
|
|
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 315
Nothing
|
Si tambien me fije de eso habra que buscarle otra solución a eso tambien...
|
|
|
|
|
En línea
|
|
|
|
|
Xtriker
|
Pues yo intente hacer un ejemplo, espero sirva, aunque tiene problemas cuando escribes entre texto, podria servir de referencia Private Reservadas As String() = _ {"if", "then", "else", "echo", "@"} 'En este arreglo pones todas las palabras que quieras que aparezcan en color
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged Dim i As Integer = RichTextBox1.SelectionStart Dim ActualCursor As Integer = RichTextBox1.SelectionStart 'recordar el punto de donde se estaba escribiendo Dim j As Integer = 0 If i <> 0 Then 'evitar que el indice se salga del rango Do i = i - 1 'recorre en reversa hasta encontrar un espacio j = j + 1 'cuenta los caracteres de la palabra Loop While RichTextBox1.Text(i) <> CChar(" ") And i <> 0 'termina cuando encuentra un espacio End If Dim substring As String = RichTextBox1.Text.Substring(i, j).Trim() 'obtiene la ultima palabra escrita, quitandole los espacios
If Reservadas.Contains(substring) Then 'comprobar que la palabra este en la lista RichTextBox1.Find(substring, RichTextBoxFinds.Reverse) RichTextBox1.SelectionColor = Color.Blue 'Colorea el texto RichTextBox1.SelectionStart = ActualCursor End If
RichTextBox1.SelectionColor = Color.Black 'Vuelve al color primario RichTextBox1.SelectionStart = ActualCursor End Sub
Este codigo esta hecho en Visual studio 2008, espero que no este muy enrredado, espero sirva de algo amigo
|
|
|
|
|
En línea
|
|
|
|
Braayhaan
Desconectado
Mensajes: 224
|
Esta exelente Xtriker me funciono perfectamente, algun tip para ponerle mas colores? no solo el azul. Gracias de antemano 
|
|
|
|
|
En línea
|
|
|
|
raul338
Conectado
Mensajes: 2.373
La sonrisa es la mejor forma de afrontar las cosas
|
Jó!! Xtriker me gano de mano xD xD logre hacer esto, que solo falla cuando borras todo el texto (por eso el try xD), no titilea cuando tienes un texto muuuy largo ya que solo trabaja en la linea actual. Y tiene para los colores que tu quieras!!!!  Dim lastPos As Integer ' Donde se estaba escribiendo Dim nLine As Integer ' Linea donde se trabaja Dim start As Integer ' Indice del principio de la linea dentro del texto Dim final As Integer ' Fin de la linea (largo de la linea) Private Sub rtf_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf.TextChanged ' "@" se colorea (NOTA: Funciona a medias, con el tema ' "@asfdasd" : @ se colorea ( de que si se borra queda el color que estaba) colorear("@", Color.Red, False, False) ' "echo" se colorea ' "malechor" : echo no se colorea colorear("echo", Color.Blue, False) End Sub Sub colorear(ByVal clave As String, ByVal color As Color, Optional ByVal spaceAntes As Boolean = True, Optional ByVal spaceDespues As Boolean = True) Try ' Para recordar en que posicion estaba y no provocar problemas lastPos = rtf.SelectionStart ' Obtenemos la linea a trabajar nLine = rtf.GetLineFromCharIndex(lastPos) ' Obtenemos el indice de la linea (indice dentro de todo el texto, no conviene separar la linea en otra variable) start = rtf.GetFirstCharIndexOfCurrentLine() ' establecemos el limite para buscar la palabra clave final = rtf.Lines(nLine).Length ' Para saber si se tiene que escribir la palabra clave por separado If spaceAntes Then clave = " " & clave If spaceDespues Then clave = clave & " " ' Buscamos la palabra clave, si no esta, no hacemos nada If Not rtf.Text.IndexOf(clave, start, final) = -1 Then rtf.SelectionStart = rtf.Text.IndexOf(clave, start, final) rtf.SelectionLength = clave.Length ' Para no colorear demas.... rtf.SelectionColor = color End If ' Volvemos a donde se estaba escribiendo, y al color normal rtf.SelectionStart = lastPos rtf.SelectionLength = 0 rtf.SelectionColor = rtf.ForeColor Catch ex As Exception End Try End Sub Tuve cierto problemita con los espacion, ya que si pones "Mecho" coloreaba "echo" en azul ¬¬ asi que bueno, tuve que ponerle esos parametros opcionales. aunque igual se entiende.....espero que te sirva!!! Eso si, mi RichTextBox se llama rtf por las dudas  Eso si, quiero estar en los creditos!!!! EDIT: agregado comentarios EDIT 2: probe la solucion de striker pero me tiro error en "Reservadas.Contains" por que no era array o algo asi me dio el error, igual lo suplante por un ForEach y solo me colorea si la palabra esta en la primera linea, no en cualquier otra... u.u
|
|
|
|
« Última modificación: 4 Septiembre 2009, 18:04 por raul338 »
|
En línea
|
|
|
|
|
|
|
|