Удалите пустые блоки из Richtextbox без потери форматирования - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу удалить пустые / ненужные места и возврат каретки из моего RichTextBox или TextRange. Ниже приведен код, который я пробовал. Однако, хотя я могу удалить пустые места, но в то же время форматирование также потеряно.

Я понимаю, что в момент установки textRange.Text форматирование теряется.

Я не знаю, как двигаться дальше с этим.

string findword = findWord.Text;
string replaceword = replaceText.Text;

        TextRange textRange = LoadXamlPackage(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);

        string[] lines = textRange.Text.Trim().Split('\r');

        for (int i = 0; i < lines.Count(); i++)
        {
            if (lines[i].Contains(findword) && replaceword == string.Empty)
            {
                lines[i] = "";
            }
        }

        textRange.Text = string.Join(" ", lines);

1 Ответ

0 голосов
/ 15 апреля 2019

string findword = findWord.Text;string replaceword = replaceText.Text;

    TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);

    string[] lines = textRange.Text.Trim().Split('\r');

        for (int i = 0; i < lines.Count(); i++)
        {
            if (lines[i].Contains(findword) && replaceword == string.Empty)
            {
                lines[i] = "";
            }
        }
        //textRange.Text = string.Join("", lines);         

        string rtf = string.Empty;
        MemoryStream objmemoryStream = new MemoryStream();
        textRange.Save(objmemoryStream, DataFormats.Rtf);
        rtf = System.Text.ASCIIEncoding.Default.GetString(objmemoryStream.ToArray());           
        rtf = rtf.Replace(findword, replaceword);  
        MemoryStream objmemoryStream1 = new MemoryStream(System.Text.ASCIIEncoding.Default.GetBytes(rtf));
        rtfTestResult.SelectAll();
        rtfTestResult.Selection.Load(objmemoryStream1, DataFormats.Rtf);

Когда я раскомментирую строку ниже, форматирование полностью теряется - textRange.Text = string.Join ("", lines);

...