locked
Seleccionar linea en RichTextBox RRS feed

  • 问题

  • Hola
    tengo dos dudas con el RichTextBox.


    Tengo un RichTextBox en el que cargo un archivo de texto mediante el evento RichTextBox.Load.
    Realizo busquedas mediante el evento RichTextBox.Find().
    La palabra a buscar se introduce en un TextBox y un botón desencadena el evento.
    Funciona correctamente. Si la palabra buscada se encuentra, esta es resaltada.
    El caso es que yo no quiero que me seleccione/resalte solo la palabra buscada; yo quiero que
    me seleccione/resalte la linea entera que la contiene.

    Ejemplo:

    La palabra buscada: "Manzana"
    La linea que la contiene: "La Manzana es una fruta nutritiva y muy sabrosa."

    Tal como lo tengo ahora, solo resalta "Manzana".
    Tal como yo lo quiero, debería resalta toda la linea, en este caso:
    "La Manzana es una fruta nutritiva y muy sabrosa.".

    La razón de que lo quiera así, es que debo eliminar las lineas que contengan resultados.
    En este caso, la linea que contiene la palabra buscada, o sea, Manzana.


    Relacionada con la anterior.

    Cuando elimino una linea me queda el espacio en blanco. el que antes ocupaba la linea eliminada.

    Ejemplo:

    "La Pera es una fruta nutritiva y muy sabrosa."
    "La Manzana es una fruta nutritiva y muy sabrosa."
    "La Uva es una fruta nutritiva y muy sabrosa."

    Suponiendo que elimino la del medio, queda así:

    "La Pera es una fruta nutritiva y muy sabrosa."

    "La Uva es una fruta nutritiva y muy sabrosa."

    Como puedo evitarlo?. Como consigo, que una vez eliminada una linea, quede así:

    "La Pera es una fruta nutritiva y muy sabrosa."
    "La Uva es una fruta nutritiva y muy sabrosa."

    Sin el espacio en blanco.

    El código que utilizo:

    Dim Path As String = "C.\TextFile.txt"
    Me.RichTextBox1.LoadFile(Path, RichTextBoxStreamType.PlainText)
            Dim tempArray() As String
            tempArray = Me.RichTextBox1.Lines
    Dim SearchLine As String = Me.txtSearchFor.Text  ' Search key is introducido por usuario.
    
    Dim MyIndex1 As Integer = Me.RichTextBox1.Find(SearchLine, RichTextBoxFinds.WholeWord)
                            If MyIndex1 <> -1 Then
                                Me.RichTextBox1.Select(MyIndex1, SearchString.Length)
                               Me.txtSearchFor.Text = Me.RichTextBox1.SelectedText
                            End If

    Gracias por adelantado.
    Saludos










    2010年3月11日 18:02

答案

全部回复

  • hola

    mira este link

    Select line in RichTextBox

    alli se muestra como seleccionar la linea donde te encuentras


    con respecto a las lineas  en blanco por ahi esto ayude

    Remove Blank Lines from richtextbox

    lo que haces es tomar el text y lo separa por salto de linea, pero descarta las vacias

    lo malo es que solo funciona con text plano, si aplcias formato al text no funcionara
    en ese caso podrias hacer

    Removing empty lines from richTextBox?

    o sea un foreach, recorriendo linea a linea y validando si esta vacia


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • 已标记为答案 Jota69 2010年4月19日 21:50
    2010年3月13日 4:45
  • hola
    Los dos enlaces sobre las lineas vacías, me ha ido muy bien, aunque yo lo había resuelto de una
    forma, digamos, menos ortodoxa. Y consistía en seleccionar la linea en cuestión y la de abajo,
    luego reemplazarlas por la de abajo.

    volviendo al ejemplo de arriba:
    "La Pera es una fruta nutritiva y muy sabrosa."
    "La Manzana es una fruta nutritiva y muy sabrosa."
    "La Uva es una fruta nutritiva y muy sabrosa."

    Me selecciona las dos ultimas filas, y las reemplaza por la ultima, con lo que ya no queda el
    espacio vacío.
     
    En cuanto a seleccionar la fila entera, el enlace que me das se puede adaptar a visual basic,
    pero no me acaba de dar el resultado esperado. Seguimos queriendo seleccionar la linea del medio, del ejemplo:

    "La Manzana es una fruta nutritiva y muy sabrosa."
    Y me selecciona:
    La Manzana es una fruta nutritiva y muy sab

    como puedes deducir por el tamaño, por algún motivo la iteración se detiene en la linea anterior y la toma como CurrentLine, asignándole el tamaño de esta, a la linea siguiente, que es la que nos interesa.

    Así quedo la cosa:

    Dim j As Integer = RichTextBox1.Find(lineString, RichTextBoxFinds.WholeWord)
            For i As Integer = 0 To lineStr.GetUpperBound(0) '- 1
                strLine = RichTextBox1.Lines(i).Length
                If j <> -1 Then
                    strLine = RichTextBox1.Lines(j).Length
                    MsgBox("RichTextBox1: " & RichTextBox1.SelectedText)
                    Dim firstcharindex As Integer = RichTextBox1.GetFirstCharIndexOfCurrentLine()
                    Int(currentLine = RichTextBox1.GetLineFromCharIndex(firstcharindex))
                    Dim currentlinetext As String = RichTextBox1.Lines(currentLine)
                    RichTextBox1.Select(firstcharindex, strLine)
                    MsgBox("RichTextBox1: " & RichTextBox1.SelectedText)
                    RichTextBox1.SelectedText = ""
                    Me.RichTextBox1.Lines = Me.RichTextBox1.Text.Split(New Char() {ControlChars.Lf}, _
                    StringSplitOptions.RemoveEmptyEntries)
    
                    Exit For
                End If
            Next
    Nota: lineString lo asigna el usuario en un textbox. Un botón desencadena el evento, y lo toma como parámetro.
    ¿Donde puede estar el fallo?
    Saludos.


    2010年3月14日 2:29
  • el indice del richtextbox empieza en 0

    nosotros numeramos las lineas desde 1

    el usuario ingresa lo que el piensa es el numero de linea

    por eso toma la linea siguiente


    Hugo González (Macgyber)

    2022年8月20日 22:00