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