【问题标题】:WPF RichTextBox: AppendText, TextRange and the trailing newlineWPF RichTextBox:AppendText、TextRange 和尾随换行符
【发布时间】:2020-06-17 19:12:02
【问题描述】:

我正在将文本文件的内容读入 RichTextBox,如下所示:

string contents = File.ReadAllText("MyFile.txt");
myRichTextBox.Document.Blocks.Clear();
myRichTextBox.AppendText(contents);

我正在使用 RichTextBox 自动应用一些语法高亮显示。当我尝试将未格式化的文本读取为described here 以将其保存回文件时,事情发生了:

  1. 换行符 (\r\n) 添加到文件的后面,除非用户明确添加此换行符,否则我不希望这样做。
  2. 当我再次加载文件时,RichTextEdit 中不会显示换行符,即使它存在于文件中。

如何更改此设置,以便 RichTextBox 显示并准确返回文本文件的内容?

【问题讨论】:

    标签: c# wpf newline richtextbox


    【解决方案1】:

    这行得通吗?内容.替换("\r\n", "\n");

    【讨论】:

    • 不幸的是,行为是一样的。
    【解决方案2】:

    换行符\r\n (CR/LF) 是RichTextBox 控件中文本格式的一部分。转换为文本时的每个段落都将附加\r\n

    这意味着当用户按下 ENTER 按钮时,带有\r\n 的新段落将添加到RichTextBox 控件中。当使用 Microsoft 文档中描述的 StringFromRichTextBox() 方法从 RichTextBox 中提取文本内容时,它将返回一个字符串,其中所有段落都由 \r\n 分隔。

    上面关于cmets的解释:

    一个换行符 (\r\n) 被添加到文件的后面,除非用户明确添加这个换行符,否则我不想要它。

    换行符\r\n 仅作为每个段落结尾的一部分添加到文件末尾。

    注意:如果需要保存并随后加载保存的文档,可以使用TextRange.Save()TextRange.Load() 方法:

    public void SaveRtf(RichTextBox rtb, string file)
    {
        var range = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
        using (var stream = new StreamWriter(file))
        {
            range.Load(stream.BaseStream, DataFormats.Rtf);
        }
    }
    
    public void LoadRtf(RichTextBox rtb, string file)
    {
        var range = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
        using (var stream = new StreamWriter(file))
        {
            range.Save(stream.BaseStream, DataFormats.Rtf);
        }
    }
    

    如果要保存整个RuchTextBox 内容,则将使用new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd).Text,而不是恢复后的任何文本格式都将丢失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-26
      • 2012-01-25
      • 2013-02-10
      • 2011-04-01
      • 1970-01-01
      • 2021-12-29
      • 2017-03-01
      • 2010-09-21
      相关资源
      最近更新 更多