如何找到WPF TextBox的更改文本?

时间:2015-09-19 11:20:57

标签: c# wpf textbox custom-controls textchanged

假设我们从WPF TextBox继承,然后尝试通过覆盖OnTextChanged来更改文本。

然后我们会注意到发生了变化,但我们唯一的信息是:

  • 抵消发生此更改
  • 删除长度
  • 添加长度

我们可以使用

获得准确添加的文字
Text.Substring(Change.Offset, Change.AddedLength) 

OnTextChanged

文本更改发生在不同的条件下(例如用户输入,粘贴文本或在代码中设置Text属性)。 e.Changes是否有可能出现相互冲突的变化?

这种方法是否是一种信任方式?如果答案为否,是否有其他标准方法可以获得准确的更改文本?

1 个答案:

答案 0 :(得分:1)

对于TextBox,此事件在其文本更改时发生;对于RichTextBox,当任何内容或格式更改(例如,图像,表格或背景颜色)时,会发生此事件。

  1. 我们可以使用......获得准确的添加文字吗?
  2. 是的,如果是TextBox,您将始终获得准确的文本。您可以使用e.UndoAction检查文本的添加/删除。 请在此处阅读documentation

    1. e.Changes是否有可能出现相互冲突的变化?
    2. 不会发生相互冲突的变化。

      一般来说,以下情况总是如此:

        
          
      • 发生的更改会导致文档处于有效状态。      该集合是连续排序的,与控件中发生更改的位置有关。例如,TextChange对象   表示位置2的更改在TextChange之前   表示位置10处的变化的对象。

      •   
      • 两个TextChange对象不代表重叠区域。 Offset的值加上一个TextChange的AddedLength值   对象总是小于或等于
        的偏移值   集合中的下一个TextChange对象。同样,
        的价值   偏移加上一个TextChange对象的RemovedLength值为
          始终小于或等于下一个的偏移值   集合中的TextChange对象。

      •   
      • 该集合反映了所发生的任何变化,即使似乎没有净变化。在前面的例子中,既没有   第一次或第四次更改会导致净更改,因为每个更改只是为了   分别删除并重新添加和符号。但
          实际上删除并添加了符号,因此它们包含在中   该系列。

      •   

      可以阅读更多内容here