gpt4 book ai didi

c# - 如何将 a\line 而不是 a\par 附加到 System.Windows.Forms.RichTextBox

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:04 24 4
gpt4 key购买 nike

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

我有一个字符串数组,我想将其附加到 RichTextBox,但我不想在 RTF 中创建新段落。我希望这些行被\line 命令分割,而不是 RTF 中的\par 命令。 (我想模拟某人输入 shift+enter 而不是直接输入。)

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

当其中一个字符串包含在 RTF 中转义的字符(例如,单个闭引号转换为\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;
}
}

最佳答案

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

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

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

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

rtb.Text += textInfo.Text;

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

编辑:

由于您是逐行向文档添加行,并且您知道控件会为\r\n 生成一个\par,因此您可以在你想用\line 分隔的行。当然,您必须能够识别要替换的行,我假设您从问题中做到了这一点。附加您的唯一文本后,您可以再次将 REPLN\par 替换为\line。没有我想要的那么优雅,但它完成了工作。

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");

关于c# - 如何将 a\line 而不是 a\par 附加到 System.Windows.Forms.RichTextBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com