Как удалить пустые строки при сохранении форматирования richtextbox в c #

1

Я хочу сохранить курсив в тексте, удалив все пустые строки. Кажется, я не могу это сделать.

Я использовал этот код. Он удаляет пустые строки, но текст выделяется курсивом.

richTextBox1.Text = Regex.Replace(richTextBox1.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline);
Теги:
formatting
richtextbox
removing-whitespace
preserve

2 ответа

0
Лучший ответ

Золотое правило о RichTextBoxes заключается в том, чтобы никогда не изменять Text напрямую, как только он имеет какое-либо форматирование.

Чтобы добавить вы используете AppendText и для изменения вам нужно использовать методы Select, Cut, Copy & Paste.. чтобы сохранить форматирование!

string needle = "\r\r";  // only one possible cause of empty lines

int p1 = richTextBox1.Find(needle);
while (p1 >= 0)
{
    richTextBox1.SelectionStart = p1;
    richTextBox1.Select(p1, needle.Length);
    richTextBox1.Cut();
    p1 = richTextBox1.Find(needle);
}

Боюсь, что для нескольких игл вам нужно будет позвонить код несколько раз.

  • 0
    Огромное спасибо. Этот код работает отлично.
1

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

String[] allLines = richTextBox1
                    .Rtf
                    .Split( new string[] { Environment.NewLine },StringSplitOptions.None);

dynamic linesWithoutEmptyLines = from itm in allLines 
                                 where itm.Trim() != "\\par" 
                                 select itm;

richTextBox1.Rtf = string
                   .Join(Environment.NewLine, linesWithoutEmptyLines);

Он сохранит форматирование текста и удалит все пустые строки.

  • 0
    +1 за включение \\par -1 для предположения, что Environment.NewLine - хорошая идея. Это вряд ли когда-либо ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню