在RichTextBox WPF中的索引处设置插入符号

时间:2018-04-29 18:04:56

标签: c# wpf

我正在尝试根据单词的索引位置在richtextbox中设置插入符号的位置。即使我能够改变插入位置,插入符号也不会移动到正确的位置。

以下是我的示例代码:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        RTB_Main.Document.Blocks.Clear();
        for (int i = 0; i < 10; i++)
        {
            Paragraph para = new Paragraph(new Run(i + ""));
            RTB_Main.Document.Blocks.Add(para);
        }
        TextRange richText = new TextRange(RTB_Main.Document.ContentStart, RTB_Main.Document.ContentEnd);
        string searchText = tb_Search.Text; // 1 to 9

        int position = Regex.Match(richText.Text, searchText).Index;

        RTB_Main.CaretPosition = RTB_Main.Document.ContentStart;
        RTB_Main.CaretPosition = RTB_Main.CaretPosition.GetPositionAtOffset(position);
        RTB_Main.Focus();
    }

这种方法有什么问题?  另外,如果有更好的方法将插入位置设置为索引,请告诉我吗?

1 个答案:

答案 0 :(得分:0)

确定。所以我的案例中的问题是由新的线路查询器\r\n引起的。我刚刚用另一个charectors取代了它们,它对我有用。请注意,我用2个charectors替换它们但是4个。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        RTB_Main.Document.Blocks.Clear();
        for (int i = 0; i < 10; i++)
        {
            Paragraph para = new Paragraph(new Run(i + ""));
            RTB_Main.Document.Blocks.Add(para);
        }
        TextRange richText = new TextRange(RTB_Main.Document.ContentStart, RTB_Main.Document.ContentEnd);
        string searchText = tb_Search.Text; // 1 to 9

        string tmpStr = richText.Text.Replace("\r\n", "....");

        int position = Regex.Match(tmpStr, searchText).Index;
        RTB_Main.CaretPosition = RTB_Main.Document.ContentStart;
        RTB_Main.CaretPosition = RTB_Main.CaretPosition.GetPositionAtOffset(position);
        RTB_Main.Focus();
    }