2014-11-03 2 views
1

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

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

richTextBox1.Text = Regex.Replace(richTextBox1.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline); 

ответ

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

Большое вам спасибо. Этот код работает отлично. – Zain

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' - хорошая идея. Это почти никогда не бывает. – TaW