【发布时间】:2014-09-06 15:26:15
【问题描述】:
我有一个允许用户浏览数据的应用程序。我有控制导航的菜单项和显示数据的 RichTextBox。非常简单。
tl;dr 版本
除了一个奇怪的问题外,它大部分都有效。在某些情况下,RichTextControl 会将键入的第一个字符替换为随机 unicode 字符。随意下载此示例应用并亲自查看:
http://www.technitivity.com/stackoverflow/RichTextFocusTest.zip
完整说明
在行之间导航时会出现此问题。最好用几个用例来描述:
用例 1
- 导航到数据集中的任意位置。
- 按回。
- 按下一步。
- 输入任意字母,例如“F”。
- 结果:“F”按预期出现在 RichTextBox 中。
用例 2
- 导航到数据集中的任意位置。
- 按两次。
- 按两次下一步。
- 输入字母“F”。
- 结果:RichTextBox 中出现的不是“F”,而是“ᅲ”。
用例 3
- 导航到数据集中的任意位置。
- 按下一步两次。
- 按两次。
- 输入字母“F”。
- 结果:RichTextBox 中出现的不是“F”,而是“᧴”。
导航过程只需要:
// either forward
i++;
// or backward
i--;
// then update
RichTextBox1.Text = MyData[i];
从程序上讲:
// This works
RichTextBox1.Text = MyData[3];
// This works
RichTextBox1.Text = MyData[3];
RichTextBox1.Text = MyData[2];
RichTextBox1.Text = MyData[3];
// This doesn't work
RichTextBox1.Text = MyData[3];
RichTextBox1.Text = MyData[2];
RichTextBox1.Text = MyData[1];
RichTextBox1.Text = MyData[2];
RichTextBox1.Text = MyData[3];
当然,这不是实际正在发生的事情,而是有效正在发生的事情。
请务必注意,如果 RichTextBox 在更新之间失去焦点,则不会发生这种情况。只有当 RichTextBox 保持焦点,同时它的 Text 属性按照上述描述更新时才会发生这种情况。
我完全不知道是什么导致了这个问题,如何解决它,或者为什么我似乎找不到其他人遇到这个问题。
我已经在 64 位 Windows 7 和 32 位 Windows Vista 上复制了它。这是在 .NET Framework 4 上的,尽管我也能够在 .NET Framework 2 项目上重现。
希望其他人遇到过这个问题(并解决了它!)
编辑:
截图如下:
http://www.technitivity.com/stackoverflow/RichTextBox-Screenshot1.png
如 cmets 中所述,要在示例应用程序中重现这一点,您必须使用键盘菜单快捷方式。如果单击菜单项(或工具栏按钮),RichTextBox 会失去焦点,问题就会消失。但是,如果您使用 Alt+Left 或 Alt+Right(后退/下一个)并键入 then 浏览项目,您应该会看到类似于上面屏幕截图中显示的内容。
【问题讨论】:
-
我刚刚下载了你的演示源代码,在VS 2008/Framework 3.5/Windows 7/Debug/AnyCPU中构建,我无法重现问题。 (出于安全原因,我没有运行您提供的 .exe。)您能否描述我需要对演示应用执行的用户操作的确切顺序?例如,“导航到数据集中的任何地方”是否意味着“用鼠标在两个字母之间单击”?
-
您需要确保使用菜单项快捷键进行导航。如果您单击菜单项或单击工具栏按钮,则不会发生此问题(因为您将焦点从 RichTextBox 移开)。快捷键是 Alt+Left 和 Alt+Right。
标签: c# .net richtextbox