Удалить строку текста, где расположен курсор - PullRequest
0 голосов
/ 06 июня 2018

Весь мой приведенный ниже код удаляет все пустые строки из TextBox.
Но я хочу, чтобы указанная линия курсора удалялась при нажатии на кнопку.

'First method
TextBox2.Lines = TextBox2.Lines.Where(Function(l) Not String.IsNullOrWhiteSpace(l)).ToArray()
Dim count = TextBox2.Lines.Length

'Second method
Dim tmp() As String = TextBox2.Text.Split(CChar(vbNewLine))
TextBox2.Clear()
For Each line As String In tmp
    If line.Length > 1 Then
        TextBox2.AppendText(line & vbNewLine)
    End If
Next

'Third method
Dim SearchIn = Me.TextBox2.Text
Dim sb As StringBuilder = New StringBuilder(SearchIn)
Me.TextBox2.Text = sb.Replace(vbCrLf + vbCrLf, vbCrLf).ToString

'Fourth method
TextBox2.Text = Regex.Replace(TextBox2.Text, "(?<Text>.*)(?:[\r\n]?(?:\r\n)?)", "${Text} ") + "/n"

TextBox2.Text = Replace(TextBox2.Text, vbCrLf & vbCrLf, vbCrLf)

1 Ответ

0 голосов
/ 06 июня 2018

Чтобы удалить строку текста из TextBoxBase производного элемента управления (TextBox, RichTextBox), сначала необходимо определить правильную строку.

Нельзя использовать .Свойство Lines , если текст переносится, поскольку он возвращает номер строки относительно развернутого текста.

Вы можете получить текущую переносимую строку с помощью GetLineFromCharIndex () ,Параметр Integer - это текущая позиция каретки, на которую ссылается свойство SelectionStart.

Первый индекс символа этой строки восстанавливается с помощью GetFirstCharIndexFromLine () .

Затем найдите текущую длину строки, определяющую первую строку.Добавьте длину символа (ов) перевода строки, чтобы включить их в вычисленную длину.

Обратите внимание, что TextBox элементы управления используют Environment.Newline для генерации перевода строки («\r\n»), в то время как RichTextBox элементы управления используют только перевод строки («\n»).

Это удалит любую строку, где курсор находится в данный момент:
(Если вы просто хотите разрешить удаление пустых строк, проверьте, равна ли длина строки < 3).

Dim CurrentPosition As Integer = TextBox2.SelectionStart
Dim CurrentLine As Integer = TextBox2.GetLineFromCharIndex(CurrentPosition)
Dim LineFirstChar As Integer = TextBox2.GetFirstCharIndexFromLine(CurrentLine)
Dim LineLenght As Integer = TextBox2.Text.
                            IndexOf(Environment.NewLine, LineFirstChar) - LineFirstChar +
                            Environment.NewLine.Length
If LineLenght <= 0 Then Return

TextBox2.Select(LineFirstChar, LineLenght)
TextBox2.SelectedText = TextBox2.SelectedText.Remove(0)
TextBox2.SelectionLength = 0
TextBox2.SelectionStart = If(CurrentPosition < TextBox2.Text.Length, LineFirstChar, TextBox2.Text.Length)
TextBox2.Focus()

Вместо этого будет удален весь абзац, содержащий символ вставки:

Dim CurrentPosition As Integer = TextBox2.SelectionStart
Dim ParagraphFirstIndex As Integer = TextBox2.Text.
                                     LastIndexOf(Environment.NewLine, CurrentPosition) +
                                                 Environment.NewLine.Length
Dim LineFeedPosition As Integer = TextBox2.Text.IndexOf(Environment.NewLine, ParagraphFirstIndex)
LineFeedPosition = If(LineFeedPosition > -1, LineFeedPosition + Environment.NewLine.Length, TextBox2.Text.Length)

Dim LineLenght As Integer = LineFeedPosition - ParagraphFirstIndex
If LineLenght <= 0 Then Return

TextBox2.Select(ParagraphFirstIndex, LineLenght)
TextBox2.SelectedText = TextBox2.SelectedText.Remove(0)
TextBox2.SelectionLength = 0
TextBox2.SelectionStart = If((CurrentPosition < TextBox2.Text.Length), ParagraphFirstIndex, TextBox2.Text.Length)
TextBox2.Focus()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...