Чтобы удалить строку текста из 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()