2009-06-26 72 views
2

我在.NET 2.0中使用System.Windows.Forms.RichTextBox控件,并使用c#。如何追加一个线,而不是 par到一个System.Windows.Forms.RichTextBox

我有一个字符串数组,我想追加到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

RichTextBox控件自动更新的文本,当你修改其中任何RTF属性。附加到Text属性的任何文本都会自动更新为RTF属性。

从一些快速测试中,似乎RichTextBox控件会自动将\ par插入到任何换行符(输入,移入控件并在Text属性中添加\ r \ n \ r \ n Environment.NewLine,并将AppendText )控制本身的功能)。这是你报告的问题。

我不相信有什么办法可以改变控件如何生成RTF。我只是追加文本并让RichTextBox控件处理可能需要转义的任何字符的转换,然后将所有\ par替换为\ line。

假设textInfo是一个文本框,你想它的内容附加到一些已经存在的RTF结束(如果不更换要在第1

rtb.Text += textInfo.Text; 

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

编辑= + =:

既然你'将行逐行添加到文档中,并且您知道控件会为\ r \ n生成一个\ par,您可以将一些独特文本(您可以在这里获得创意,我使用REPLN)后缀到您想要中断的行当然,你必须能够识别你想要替换的行,我假设你是从你的问题中做出的。在追加你的独特文本之后,你然后可以用\ 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"); 
+0

这也是我的发现。我不想用RTF中的\ line实例替换所有\ par实例,所以我认为除非找到更好的东西,否则我将不得不继续使用我的解决方案。 – jameswelle 2009-06-26 05:20:26

相关问题