none
Vb.Net // Cambiarle el color a la última línea de un Richtextbox sin modificarle el color a las lineas anteriores

    Pregunta

  • Hola amigos.

    Con línea me refiero a un renglón de texto en el richtextbox.

    Esto es lo que tengo :)

                'Declaración de Variables
                Dim Antes, Despues As Integer
    
                'Cantidad de Caracteres (antes de agregar linea de texto)
                Antes = Historial.Text.Length
                'Agregado de linea
                Historial.Text = Historial.Text & vbCrLf & text1
                'Cantidad de Caracteres (despues de agregar linea de texto)
                Despues = Historial.Text.Length
    
                'Ocultar seleccion activado
                Historial.HideSelection = True
                'Seleccionar última línea
                Historial.Select(Antes, Despues - Antes)
                'Cambiar color de línea
                Historial.SelectionColor = c
                'Deseleccionar
                Historial.DeselectAll()

    Historial: RichTextBox, text1: string (nueva linea, parámetro), c: color (parámetro)

    Este procedimiento es llamado varias veces mediante eventos. Los eventos se dan sincrónicamente (no hay subprocesos).

    El problema es que siempre la última línea cambia de color :D pero las anteriores se cambian al color al que se había llamado antes, :( , explico mejor (espero no confundir aun más):

    AAA en Rojo >>

    AAA en Rojo

    BBB en Verde >>

    AAA en Verde

    BBB en Verde

    CCC en Azul >>

    AAA en Azul

    BBB en Azul

    CCC en Azul

    DDD en Amarillo '>> 

    '>>' Esto significa que ocurrió un evento y abajo muestro como quedan las lineas después de que la última cambia de color.

    Cuando lo que debería pasar es que 'AAA' tiene que estar en Rojo siempre, y no cambiar a Verde o Azul. :(

    Sí, es algo confuso  :/  las AAA, las >> pero bueno, de alguna forma había que explicarlo.

    De todos modos, gracias x pasar. Salu2.


    Saludos. Atentamente Pablo Fac.

    viernes, 2 de diciembre de 2016 19:51

Respuestas

  • Hola Admin Pablo Fac,

    ¿Pero que eventos están ejecutando ? Al parecer se está seleccionando todas las filas, y al cambiar de color se cambian todos al mismo color. Sin saber que es lo que hacen los eventos no se puede saber exactamente cuál podrías ser la solución.

    Si quieres cambiar el color de la última linea sin afectar los demás podrías usar GetFirstCharIndexFromLine(..) y la propiedad Length para obtener el final.

    Private Sub btnCambiarUltimaFila_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
        Dim ultimaLinea = RichTextBox1.Lines.Length - 1
        RichTextBox1.Select(RichTextBox1.GetFirstCharIndexFromLine(ultimaLinea),
                                            RichTextBox1.Lines(ultimaLinea).Length)
    
        RichTextBox1.SelectionColor = Color.Orange
    
        RichTextBox1.DeselectAll()
    End Sub

    Resultado :

    Si das más detalles para ayudarte.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 2 de diciembre de 2016 22:43

Todas las respuestas

  • Hola Admin Pablo Fac,

    ¿Pero que eventos están ejecutando ? Al parecer se está seleccionando todas las filas, y al cambiar de color se cambian todos al mismo color. Sin saber que es lo que hacen los eventos no se puede saber exactamente cuál podrías ser la solución.

    Si quieres cambiar el color de la última linea sin afectar los demás podrías usar GetFirstCharIndexFromLine(..) y la propiedad Length para obtener el final.

    Private Sub btnCambiarUltimaFila_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
        Dim ultimaLinea = RichTextBox1.Lines.Length - 1
        RichTextBox1.Select(RichTextBox1.GetFirstCharIndexFromLine(ultimaLinea),
                                            RichTextBox1.Lines(ultimaLinea).Length)
    
        RichTextBox1.SelectionColor = Color.Orange
    
        RichTextBox1.DeselectAll()
    End Sub

    Resultado :

    Si das más detalles para ayudarte.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 2 de diciembre de 2016 22:43
  • Hola Joel C. Naupa Crispín.

    El tema es que estuve 'atascado' en el desarrollo de otra cosa y entonces no respondí ante ayer cuando leí tu respuesta. Ya lo probé y me funciona! :D

    Gracias, te la marco como útil porque ya tenes como marcada la respuesta.


    Saludos. Atentamente Pablo Fac.

    lunes, 5 de diciembre de 2016 18:11