2012-10-15 27 views
2

如果我拖动(回到前面)选择RichTextBox中的文本,则Selection.Text与实际选择相匹配。 但是,如果我拖动(从前到后)在同一个RichTextBox中选择文本,则Selection.Text为总是为空字符串。RichTextBox Selection.Text不正确

我需要这些信息的原因是,在重新解析(这涉及清除所有文本并重新填充它)RichTextBox中的文本后,我需要将插入符号返回到原始位置。

我的目标是获得选择开始的偏移量。我可以使用它来获取一个停止在那里的字符串,我将在解析结束时使用它替换插入符号。

if (String.IsNullOrWhiteSpace(Selection.Text)) 
       restartPosition = activeRun.ContentStart.GetOffsetToPosition(CaretPosition.GetInsertionPosition(LogicalDirection.Forward)); 
      else 
       restartPosition = activeRun.ContentStart.GetOffsetToPosition(Selection.Start); 

关键在于'if'语句。如果没有选择,我可以使用文本指针指定光标所在的位置。如果有选择,我需要它的开始。具有讽刺意味的是,如果它在另一个方向上失败了,那就不成问题了。

有没有一种方法来准确地检索选择?微软的实施似乎有点不妥。

+0

所以明显的问题是,我该如何解决这个问题? – Greg

+0

什么语言和框架?例如:C#,Java,Objective-C? .Net,Android,iOS等? –

+0

WPF .Net 4.0中的C#。还要注意,这是在RichTextBox的OnPreviewKeyDown事件期间。 – Greg

回答

1

所以,它没有被打破。更改CaretPosition会清除选择。那就是发生了什么事。像现在的冠军一样工作。