代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

确定在文本框中添加或删除字符的时间和内容

  •  6
  • Alon Gubkin  · 技术社区  · 15 年前

    我在WPF应用程序中有一个简单的文本框。

    我需要知道 什么时候 在文本框中添加/删除了一个字符, 哪一个 角色和 在哪里? 它被添加或删除。

    我想用 TextBox.KeyDown 事件,但它有一些问题:

    • 我不知道在哪里添加或删除了字符。
    • 我不知道如何确定添加了哪个字符(从 KeyEventArgs )

    有什么想法吗?

    2 回复  |  直到 11 年前
        1
  •  8
  •   Alon Gubkin    15 年前

    找到了解决方案。在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));
            }
        }
    }
    

    现在我只需要等两天就可以接受这个答案。:)

    不管怎样,还是谢谢你。

        2
  •  3
  •   Dror Helper    15 年前

    您可以使用“蛮力”方法-文本框(在winforms中,我认为在wpf中)有一个文本更改事件,您可以使用,通过比较事件前的文本和当前文本,您可以找到添加或删除的字符。