2010-04-04 22 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

相關問題