RichTextBox用" random"替换输入unicode字符

时间:2014-09-06 15:26:15

标签: c# .net richtextbox

我有一个允许用户浏览数据的应用程序。我有控制导航的菜单项和显示数据的RichTextBox。非常直截了当。

tl; dr version

除了一个奇怪的问题外, 主要是。在某些情况下,RichTextControl将替换使用随机unicode字符键入的第一个字符。随意下载此示例应用程序并亲自查看:

http://www.technitivity.com/stackoverflow/RichTextFocusTest.zip

完整解释

在行之间导航时会出现问题。最好用几个用例来描述:

使用案例1

  1. 导航到数据集的任何位置。
  2. 按回来。
  3. 按下一步。
  4. 键入任何字母,例如," F"。
  5. 结果:" F"按预期显示在RichTextBox中。
  6. 使用案例2

    1. 导航到数据集的任何位置。
    2. 两次
    3. 按两次。
    4. 键入字母" F"。
    5. 结果:而不是" F","ᅲ"出现在RichTextBox中。
    6. 使用案例3

      1. 导航到数据集的任何位置。
      2. next 两次。
      3. 按两次。
      4. 键入字母" F"。
      5. 结果:而不是" F","᧴"出现在RichTextBox中。
      6. 导航过程只需要:

        // 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(后退/下一个)和然后类型浏览项目,您应该会看到类似上面屏幕截图中显示的内容。

1 个答案:

答案 0 :(得分:1)

我毫不犹豫地称之为"回答",但我找不到"发布黑客"按钮和这个黑客确实让我过去了。我对此并不感到兴奋,但有时你只需要继续前进。在这里。

由于当RichTextBox失去焦点时问题消失了,我尝试了一个实验:

  • 我创建了一个可见的0像素宽文本框,名为Hacktastic。
  • 我在RichTextBox中添加了一个KeyPress事件。
  • 在KeyPress上:
    • Hacktastic.Focus();
    • Hacktastic.Text = KeyChar.ToString();
    • MyRichTextBox.Focus();

这很有效,(至少现在)我坚持这个作为解决方案。如果有人仍然可以尝试我的示例项目并重现和/或解决这个问题,我希望得到进一步的反馈:

http://www.technitivity.com/stackoverflow/RichTextFocusTest.zip

重新测试项目的步骤:

  1. 使用Alt +向右箭头,将数据集移动到第四条记录。
  2. 使用Alt +向左箭头,向后移动数据集两个位置,到第二个记录。
  3. 使用Alt +向右箭头,返回第四条记录。
  4. 按任意KeyChar。
  5. 观察KeyChar替换为"随机",大值unicode字符。
  6. 我说"随机"因为一组特定的导航(后退/下一个)击键将插入完全相同的unicode字符。但是,根据您在集合中的开始位置或返回的距离,您将获得不同的角色。

    另外,请注意,只返回一条记录并转发一条记录不会导致问题。为了实现这一点,你必须至少移动两条记录。