How to Select the second line of a text in textbox and change it to the first line

-1

I'm trying to make a text editor, but I'm finding it difficult to find a solution to select the second line of a text in multiple lines textbox and I want to change the second line by the pimeira. I've tried searching for it and can not find any examples.

This was the attempt I made but no expected result.

Dim CRPos As Integer

    CRPos = TextBox1.Text.IndexOf(Chr(10))

    If CRPos > -1 Then

        TextBox1.Select(1, CRPos)
        TextBox1.SelectionLength = CRPos
        TextBox1.SelectedText = ""

    End If
    
asked by anonymous 24.10.2018 / 03:38

1 answer

0

The control TextBox has the property Lines , which returns an array of String with each line of text contained in the control.

In addition, the control also exposes the GetFirstCharIndexFromLine() and GetFirstCharIndexOfCurrentLine() methods, which return the index of the first character of a given line or the current line (line numbering starts at zero).

So, the code to select the second line of a TextBox with property Multiline set to True might look like this:

Private SelecionarLinha2()

   ' Primeiro é necessário verificar se há pelo menos duas linhas.
   If TextBox1.Lines.Count > 1 Then
      ' Seleciona trecho do texto do controle começando no
      ' primeiro caractere da segunda linha (lineNumber=1).
      TextBox1.Select(TextBox1.GetFirstCharIndexFromLine(1), TextBox1.Lines(1).Length)
      ' Se o foco não for enviado para o controle TextBox, a seleção não aparecerá.
      TextBox1.Focus()
   End If

End Sub

And the code to change the second line for the first one:

Private Sub TrocarLinha2PorLinha1()

   ' Primeiro é necessário verificar se há pelo menos duas linhas.
   If TextBox1.Lines.Count > 1 Then
      Dim troca As String
      ' Quando a propriedade Lines é criada automaticamente a partir
      ' do texto digitado no controle, o array retornado por ela é
      ' apenas uma cópia somente leitura das linhas do controle,
      ' então, o texto não pode ser alterado diretamente na propriedade,
      ' por isso é necessário usar um array temporário.
      Dim linhas() As String = TextBox1.Lines

      ' Troca a segunda linha pela primeira linha.    
      troca = linhas(1)
      linhas(1) = linhas(0)
      linhas(0) = troca

      ' Devolve o array modificado para o controle.    
      TextBox1.Lines = linhas
   End If

End Sub

You could also do the same things using the "old way". Here is the code to select the second line:

Private SelecionarLinha2_JeitoAntigo()

   Dim posQuebraDeLinha As Integer = -1
   Dim firstCharIndex As Integer = -1
   Dim lineTwoLength As Integer = 0

   ' Busca pela quebra de linha da primeira linha.
   posQuebraDeLinha = TextBox1.Text.IndexOf(vbCrLf)
   If posQuebraDeLinha < 0 Then Return
   ' Índice do primeiro caractere da segunda linha.
   firstCharIndex = posQuebraDeLinha + 2   '2 = Len(vbCrLf)

   ' Busca pela quebra de linha da segunda linha.
   posQuebraDeLinha = TextBox1.Text.IndexOf(vbCrLf, firstCharIndex)
   If posQuebraDeLinha < 0 Then posQuebraDeLinha = TextBox1.TextLength

   ' Calcula o comprimento do texto na segunda linha.
   lineTwoLength = posQuebraDeLinha - firstCharIndex

   TextBox1.Select(firstCharIndex, lineTwoLength)
   TextBox1.Focus()

End Sub

And the code to change the second line to the first, the "old way":

Private Sub TrocarLinha2PorLinha1_JeitoAntigo()

   Dim troca As String
   ' Divide o texto usando a sequência de CarriageReturn (13) + LineFeed (10)
   ' como separador, resultando em um array em que cada item é uma linha.
   Dim linhas() As String = TextBox1.Text.Split(vbCrLf)

   If linhas.Count > 1 Then
      troca = linhas(1)
      linhas(1) = linhas(0)
      linhas(0) = troca

      ' Junta de volta as linhas do array, usando de novo a sequência
      ' de CarriageReturn (13) + LineFeed (10) como separador.
      TextBox1.Text = String.Join(vbCrLf, linhas)
   End If

End Sub
    
24.10.2018 / 07:17