2010-04-04 53 views
6

我在WPF应用程序中有一个简单的文本框。确定在文本框中何时添加或删除哪个字符

我需要知道当加入字符/在文本框中,性格和其中它被添加或删除删除。

我想过使用TextBox.KeyDown事件,但它也存在一些问题:

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

任何想法?

回答

8

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

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

还是要谢谢你。

+1

ACH没有,辉煌答案(因此+1),但该属性不是在Silverlight(为什么? ) – 2012-06-25 11:13:56

+1

什么是这一切...'AddCharacter'和'你在做AddString'有心计?我没有这些方法... – Pojo 2013-07-23 14:53:41

2

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

+0

会不会slooooooow?它可以是两个或三个字,但可以是一个完整的文档。 – 2010-04-04 15:48:48

+0

每次只有一个角色有变化 - 所以它不应该是太慢了 - 但注定是一个更好的解决方案 – 2010-04-05 13:23:17

相关问题