【发布时间】:2011-01-06 14:47:15
【问题描述】:
使用 Microsoft RichTextBox 控件时,可以像这样添加新行...
richtextbox.AppendText(System.Environment.NewLine); // appends \r\n
但是,如果您现在查看生成的 rtf,\r\n 字符将转换为 \par 而不是 \line
如何在生成的 RTF 中插入 \line 控制代码?
什么不起作用:
代币替换
黑客喜欢在字符串的末尾插入一个标记,然后在事后替换它,所以是这样的:
string text = "my text";
text = text.Replace("||" "|"); // replace any '|' chars with a double '||' so they aren't confused in the output.
text = text.Replace("\r\n", "_|0|_"); // replace \r\n with a placeholder of |0|
richtextbox.AppendText(text);
string rtf = richtextbox.Rtf;
rtf.Replace("_|0|_", "\\line"); // replace placeholder with \line
rtf.Replace("||", "|"); // set back any || chars to |
这几乎奏效了,如果你必须支持从右到左的文本,它就会崩溃,因为从右到左的控制序列总是在占位符的中间结束。
发送关键信息
public void AppendNewLine()
{
Keys[] keys = new Keys[] {Keys.Shift, Keys.Return};
SendKeys(keys);
}
private void SendKeys(Keys[] keys)
{
foreach(Keys key in keys)
{
SendKeyDown(key);
}
}
private void SendKeyDown(Keys key)
{
user32.SendMessage(this.Handle, Messages.WM_KEYDOWN, (int)key, 0);
}
private void SendKeyUp(Keys key)
{
user32.SendMessage(this.Handle, Messages.WM_KEYUP, (int)key, 0);
}
这也最终被转换为 \par
有没有办法将消息直接发布到 msftedit 控件以插入控制字符?
我完全被难住了,有什么想法吗?感谢您的帮助!
【问题讨论】:
-
您犯了一个错误:在第一阶段,您将两个
||替换为一个,而不是相反。
标签: c# richtextbox