我有一个允许用户浏览数据的应用程序。我有控制导航的菜单项和显示数据的RichTextBox。非常直截了当。
http://www.technitivity.com/stackoverflow/RichTextFocusTest.zip
在行之间导航时会出现问题。最好用几个用例来描述:
使用案例1
使用案例2
使用案例3
导航过程只需要:
// 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
如评论中所述,要在示例应用中重现此内容,您必须使用键盘菜单快捷方式。如果单击菜单项(或工具栏按钮),RichTextBox将失去焦点,问题就会消失。但是如果您使用Alt + Left或Alt + Right(后退/下一个)和然后类型浏览项目,您应该会看到类似上面屏幕截图中显示的内容。
答案 0 :(得分:1)
我毫不犹豫地称之为"回答",但我找不到"发布黑客"按钮和这个黑客确实让我过去了。我对此并不感到兴奋,但有时你只需要继续前进。在这里。
由于当RichTextBox失去焦点时问题消失了,我尝试了一个实验:
这很有效,(至少现在)我坚持这个作为解决方案。如果有人仍然可以尝试我的示例项目并重现和/或解决这个问题,我希望得到进一步的反馈:
http://www.technitivity.com/stackoverflow/RichTextFocusTest.zip
重新测试项目的步骤:
我说"随机"因为一组特定的导航(后退/下一个)击键将插入完全相同的unicode字符。但是,根据您在集合中的开始位置或返回的距离,您将获得不同的角色。
另外,请注意,只返回一条记录并转发一条记录不会导致问题。为了实现这一点,你必须至少移动两条记录。