The control TextBox
owns 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 methods GetFirstCharIndexFromLine()
and GetFirstCharIndexOfCurrentLine()
, which return the index of the first character of a given line or of the current line (line numbering starts at zero).
Then the code to select the second row of a TextBox
property Multiline
defined as True could be so:
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 exchange the second line for the first:
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-fashioned way".
Here 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 trade the second line for the first, "old-fashioned 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