C# RichTextBox在更改基础时丢失选择/插入符号位置';s流程文件';s文本
我为RichTextBox实现了“ChangeCase”键盘快捷键(如MS WORD中的Shift+F3),它可以更改鼠标选择的文本或插入符号位置前的最后一个单词。问题是,它有时会丢失选择,或将插入符号向左移动一个单词。 一旦它在不更改插入符号位置的情况下更改了textcase,它就永远不会更改插入符号位置(可能是某些WPF的内部缓存),因此它只能在我第一次对部分文本运行此函数时发生 使用的代码就是这里提到的解决方案 代码中有一个有问题的部分肯定是C# RichTextBox在更改基础时丢失选择/插入符号位置';s流程文件';s文本,c#,.net,wpf,C#,.net,Wpf,我为RichTextBox实现了“ChangeCase”键盘快捷键(如MS WORD中的Shift+F3),它可以更改鼠标选择的文本或插入符号位置前的最后一个单词。问题是,它有时会丢失选择,或将插入符号向左移动一个单词。 一旦它在不更改插入符号位置的情况下更改了textcase,它就永远不会更改插入符号位置(可能是某些WPF的内部缓存),因此它只能在我第一次对部分文本运行此函数时发生 使用的代码就是这里提到的解决方案 代码中有一个有问题的部分肯定是 end = this.CaretPositio
end = this.CaretPosition;
EditingCommands.MoveLeftByWord.Execute(null, this);
start = this.CaretPosition;
this.CaretPosition = end;
然而,我不知道为什么它只是偶尔发生,以及如何解决这个问题。
我认为它与这个Execute()方法的执行速度和一些副作用有关,因为在我的WPF应用程序中,这种情况有时会发生,但在Winforms中托管这个WPF控件时,将插入符号向左移动一个字的情况一直都会发生(如果我按住Shift+F3,光标会逐字移动到文档的最开头)
其他问题可能与更改TextRange的文本有关,这会导致丢失选择?但是,它并不是一直都在发生,我也不知道如何修复它。
有什么想法吗?我有两个选择,忽略这个错误或实现
MoveLeftByWord
不触及逻辑的人工逻辑
CaretPosition