Determine when and which character is added or removed in the text box

I have a simple text box in a WPF application.

I need to know when a character is added / removed in the text box , which and where it was added or deleted.

I was thinking about using the TextBox.KeyDown event, but it has some problems:

  • I do not know where the symbol was added or removed.
  • I do not know how to determine which character was added (from KeyEventArgs ).

Any ideas?

+6
c # winforms wpf textbox
source share
2 answers

Found a solution. In WPF, the TextBox.TextChanged event has TextChangedEventArgs . This class has a property called Changes .

Here is my code:

 private void textBox1_TextChanged(object sender, TextChangedEventArgs e) { foreach (var change in e.Changes) { if (change.AddedLength > 0 && change.RemovedLength == 0) { if (change.AddedLength == 1) { AddCharacter(textBox1.Text[change.Offset], change.Offset); } else { AddString(textBox1.Text.Substring(change.Offset, change.AddedLength), change.Offset); } } else if (change.AddedLength == 0 && change.RemovedLength > 0) { if (change.RemovedLength == 1) { RemoveCharacter(change.Offset); } else { RemoveString(change.Offset, change.RemovedLength + change.Offset); } } else if (change.AddedLength == 1 & change.RemovedLength == 1) { ReplaceCharacter(change.Offset, textBox1.Text[change.Offset]); } else { ReplaceString(change.Offset, change.Offset + change.RemovedLength, textBox1.Text.Substring(change.Offset, change.AddedLength)); } } } 

Now I just need to wait two days to accept this answer. :)

Thanks anyway.

+8
source share

You can use the “brute force” method - the text field (in winforms and, it seems to me, in WPF) has an event with modified text that you can use, and comparing the text before the event and the current text that you can find which character was added or removed.

+2
source share

All Articles