Determine when and which character is added or deleted in a Text Box
I have a simple text box in a WPF application.
I need to know when a character was added/deleted in the text box, which character and where it was added or deleted.
I thought about using the TextBox.KeyDown event, 开发者_运维知识库but it has some problems:
- I can't know where the character was added or deleted.
- I have no idea how to determine which character was added (from the KeyEventArgs).
Any ideas?
Found the solution. In WPF, the TextBox.TextChanged event has a TextChangedEventArgs. In this class, there is a property named Changes.
Here's 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.
You can use a "brute force" method - the text box (in winforms and I think in WPF as well) has a text changed event you can use and by comparing the text before the event and the current text you can find what character has been added or removed.
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论