Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RichTextBox在更改基础时丢失选择/插入符号位置';s流程文件';s文本_C#_.net_Wpf - Fatal编程技术网

C# RichTextBox在更改基础时丢失选择/插入符号位置';s流程文件';s文本

C# RichTextBox在更改基础时丢失选择/插入符号位置';s流程文件';s文本,c#,.net,wpf,C#,.net,Wpf,我为RichTextBox实现了“ChangeCase”键盘快捷键(如MS WORD中的Shift+F3),它可以更改鼠标选择的文本或插入符号位置前的最后一个单词。问题是,它有时会丢失选择,或将插入符号向左移动一个单词。 一旦它在不更改插入符号位置的情况下更改了textcase,它就永远不会更改插入符号位置(可能是某些WPF的内部缓存),因此它只能在我第一次对部分文本运行此函数时发生 使用的代码就是这里提到的解决方案 代码中有一个有问题的部分肯定是 end = this.CaretPositio

我为RichTextBox实现了“ChangeCase”键盘快捷键(如MS WORD中的Shift+F3),它可以更改鼠标选择的文本或插入符号位置前的最后一个单词。问题是,它有时会丢失选择,或将插入符号向左移动一个单词。 一旦它在不更改插入符号位置的情况下更改了textcase,它就永远不会更改插入符号位置(可能是某些WPF的内部缓存),因此它只能在我第一次对部分文本运行此函数时发生

使用的代码就是这里提到的解决方案

代码中有一个有问题的部分肯定是

end = this.CaretPosition;
EditingCommands.MoveLeftByWord.Execute(null, this);
start = this.CaretPosition;
this.CaretPosition = end;
然而,我不知道为什么它只是偶尔发生,以及如何解决这个问题。 我认为它与这个Execute()方法的执行速度和一些副作用有关,因为在我的WPF应用程序中,这种情况有时会发生,但在Winforms中托管这个WPF控件时,将插入符号向左移动一个字的情况一直都会发生(如果我按住Shift+F3,光标会逐字移动到文档的最开头)

其他问题可能与更改TextRange的文本有关,这会导致丢失选择?但是,它并不是一直都在发生,我也不知道如何修复它。
有什么想法吗?

我有两个选择,忽略这个错误或实现

MoveLeftByWord
不触及逻辑的人工逻辑

CaretPosition