如何在System.Windows.Forms.RichTextBox中附加\ line,而不是\ par

时间:2009-06-26 00:22:53

标签: c# richtextbox rtf

我在.NET 2.0中使用System.Windows.Forms.RichTextBox控件并使用c#。

我有一个字符串数组,我想附加到RichTextBox,但我不想在RTF中创建新的段落。我想要用\ line命令划分行,而不是RTF中的\ par命令。 (我想模拟某人键入shift + enter而不是只输入。)

我无法成功获取RichTextBox.AppendText来生成\ line命令而不是\ par命令。所以我一直在插入我的文本,然后手动将\ line命令插入RTF本身。

如果其中一个字符串包含在RTF中转义的字符(例如,单个closequote转换为\ rquote),则会失败,因为我无法找到插入RTF的原始字符串。

使用此解决方案,我需要在RTF中搜索之前将符号中的字符转义出来。

有没有办法让RichTextBox控件生成\ line命令而不是\ par命令,或者我是否必须坚持使用此解决方案并搜索RTF转义字符串。

这是我目前的代码:

string[] lines = textInfo.Lines;

for (int i = 0; i < lines.Length; i++)
{
    rtb.AppendText(lines[i]);

    if (i < lines.Length - 1)
    {
        string rtf = rtb.Rtf;

        int insertedIndex = rtf.LastIndexOf(lines[i]);

        int length = lines[i].Length;

        rtf = rtf.Insert(insertedIndex + length, @"\line");

        rtb.Rtf = rtf;
    }
}

1 个答案:

答案 0 :(得分:1)

当您修改其中任何一个时,RichTextBox控件会自动更新Text和Rtf属性。附加到Text属性的任何文本都将自动更新为RTF属性。

从一些快速测试中,似乎RichTextBox控件自动将\ par插入任何换行符(在控件上输入,shift-enter,在Text属性和AppendText()上的\ r \ n \ r \ nNand.LwLine上输入控制本身的功能)。这是您报告的问题。

我不相信有任何方法可以改变控件生成RTF的方式。我只是附加文本,让RichTextBox控件处理可能需要转义的任何字符的转换,然后用\ line替换所有\ par。

假设textInfo是一个TextBox,并且您希望将其内容附加到某些已存在的RTF的末尾(如果不在第1行中替换+ = for =

rtb.Text += textInfo.Text;

rtb.Rtf = rtb.Rtf.Replace(@"\par", @"\line");

编辑:

由于你是逐行在你的文档中添加行,并且你知道控件为\ r \ n生成\ par,你可以将一些独特的文本(你可以在这里创建,我使用REPLN)后缀为你想要用\ line打破的行。当然,你必须能够识别你想要替换的行,我假设你从你的问题中做到了。添加唯一文本后,可以再次使用\ line替换REPLN \ par。不像我希望的那样优雅,但它完成了工作。

foreach (string line in textInfo.Lines)
{
   //assuming your condition is that the string contains the substring, "substring"
   rtb.AppendText(line + (line.Contains("substring") ? "REPLN\r\n" : "\r\n"));
}

rtb.Rtf = richTextBox1.Rtf.Replace(@"REPLN\par", @"\line");