RichTextBox正在插入文本

本文关键字:插入文本 RichTextBox | 更新日期: 2023-09-27 18:24:04

适用于Windows窗体。

我正在尝试将文本插入RichTextBox的.rtf字段。

我试过两种方法。当我使用.Rtf.insert时,什么都不会发生。

当我根据自己选择的文本位置编辑.rtf字符串时,我要么会在内容中添加胡言乱语,要么会收到一个错误,表明文件格式无效。我的最佳猜测是,这是因为.rtf字符串是.rtf格式的,而我使用的选择索引是基于纯文本字符串的,所以我在.rtf字符串中的错误位置插入了文本,并扰乱了rtf代码。

但知道问题是什么(如果我是对的)并没有帮助我解决它

有没有办法让.rtf插入正确工作,或者有没有办法将选定的文本索引翻译成实际的.rtf文本位置,这样类似下面代码的东西就可以工作了?我假设RichTextBox本身必须知道如何将一个索引转换为另一个索引,因为它可以在用户键入时插入字符。

这是我的代码片段。代码的要点是在文本中插入一个标记,该标记稍后将被解析并替换为学生的名字。还会有其他这样的代码。"codeLeader"answers"codeEnder"只是我用来包围代码的字符串。在这种情况下,我使用"[*"和*]"表示有一个代码我需要解析,但我把它们放在单独的字符串中,这样如果我愿意的话,我就可以很容易地更改它。事实上,我已经编写了解析代码,它在富文本上运行得很好。只是把文本插入到richTextBox本身就是问题所在。换句话说,如果我手动键入代码,它会很好。但这对用户来说很麻烦,因为有些代码将使用索引号。

private void studentFirstNameCode_Click(object sender, EventArgs e)
{
    string ins = f1ref.codeLeader;
    ins += "SNFirst" + f1ref.codeEnder;
    int start = editorField.richTextBox1.SelectionStart;
    if (start == -1) { start = 0; }
    int end = start + editorField.richTextBox1.SelectionLength;
    if (end == -1) { end = 0; }
    string pre = editorField.richTextBox1.Rtf.Substring(0, start);
    string post = editorField.richTextBox1.Rtf.Substring(end);
    string newstring = pre + ins + post;
    editorField.richTextBox1.Rtf = newstring;
    // this also doesn't work.  gives no result at all.
    // editorField.richTextBox1.Rtf.Insert(start, newstring);
}

RichTextBox正在插入文本

我认为您不需要使用RTF属性来简单地在RichTextBox实际文本中插入文本。特别是因为您似乎没有添加RTF格式的文本。

如果你不想使用RTF,那么实现目标的最简单方法就是一行代码

editorField.SelectedText = yourParameterText;

这将在您将文本从剪贴板粘贴到所选位置时起作用(如果选择了某些内容,则最终替换文本),并且在RTF中正确格式化文本的基础工作由控件本身完成。

我通过使用.SendKeys找到了一个解决方案。这会使文本显示有点慢(好像键入得很快),所以不是最佳的,但它确实有效。

这对于一个可行的解决方案来说已经足够了,但我仍然被这个问题所困扰。这个问题似乎应该有一个比这个更优雅的解决方案。