Я хочу сохранить курсив в тексте, удалив все пустые строки. Кажется, я не могу это сделать.
Я использовал этот код. Он удаляет пустые строки, но текст выделяется курсивом.
richTextBox1.Text = Regex.Replace(richTextBox1.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline);
Золотое правило о 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);
}
Боюсь, что для нескольких игл вам нужно будет позвонить код несколько раз.
Вы можете попробовать удалить пустые строки из текста 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);
Он сохранит форматирование текста и удалит все пустые строки.
\\par
-1 для предположения, что Environment.NewLine
- хорошая идея. Это вряд ли когда-либо ..