首页 文章

RichTextBox插入文本

提问于
浏览
1

对于Windows窗体 .

我试图将文本插入RichTextBox的.rtf字段 .

我试过两种方法 . 当我使用.Rtf.insert时,根本没有任何事情发生 .

当我自己编辑基于所选文本位置的.rtf字符串时,我最终会添加乱码或者收到错误消息,指出文件格式无效 . 我最好的猜测是,这是因为.rtf字符串是.rtf格式,我使用的选择索引是基于纯文本字符串,因此我将文本插入.rtf字符串中的错误位置并弄乱RTF代码 .

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

有没有办法让.rtf.insert正常工作,或者有没有办法将选定的文本索引转换为实际的.rtf文本位置,以便下面的代码可以工作?我假设RichTextBox本身必须知道如何将一个索引转换为另一个索引,因为它可以在用户输入时插入字符 .

这是我的代码片段 . 代码的要点是在文本中插入一个标记,稍后将对其进行解析并替换为学生的名字 . 还有其他此类代码 . “codeLeader”和“codeEnder”只是我用来包围代码的字符串 . 在这种情况下,我使用“[”和]“来表示我需要解析的代码,但我将它们放入单独的字符串中,以便我可以根据需要轻松更改它 . 我实际上已经写过了解析代码,它在富文本上运行得很好 . 它只是将文本插入到富文本框本身就是问题 . 换句话说,如果我要手动输入代码它就可以正常工作 . 但这将是对用户来说很麻烦,因为有些代码会使用索引号 .

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

2 回答

  • 2

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

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

    editorField.SelectedText = yourParameterText;
    

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

  • 0

    我通过使用.SendKeys找到了解决方法 . 这使得文本看起来有点慢(好像非常快速地输入)因此不是最佳的,但它确实有效 .

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

相关问题