Определите, когда и какой символ добавляется или удаляется в текстовом поле - PullRequest
6 голосов
/ 04 апреля 2010

У меня есть простое текстовое поле в приложении WPF.

Мне нужно знать , когда символ был добавлен / удален в текстовом поле, который символ и , где он был добавлен или удален.

Я думал об использовании события TextBox.KeyDown, но у него есть некоторые проблемы:

  • Я не могу знать, где персонаж был добавлен или удален.
  • Понятия не имею, как определить, какой символ был добавлен (из KeyEventArgs).

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 04 апреля 2010

Нашел решение. В WPF событие TextBox.TextChanged имеет TextChangedEventArgs. В этом классе есть свойство с именем Changes.

Вот мой код:

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));
        }
    }
}

Теперь мне просто нужно подождать два дня, чтобы принять этот ответ. :)

В любом случае, спасибо.

3 голосов
/ 04 апреля 2010

Вы можете использовать метод "грубой силы" - текстовое поле (в winforms, и я думаю, что и в WPF) содержит событие изменения текста, которое вы можете использовать, и сравнивая текст перед событием и текущий текст, который вы можете найти какой символ был добавлен или удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...