2010-04-04 38 views
6

Tôi có một hộp văn bản đơn giản trong một ứng dụng WPF.Xác định thời điểm và ký tự nào được thêm hoặc xóa trong Hộp văn bản

Tôi cần phải biết khi một nhân vật đã được bổ sung/xóa trong hộp văn bản, nhân vật và nơi nó đã được bổ sung hoặc xóa.

Tôi nghĩ về việc sử dụng các sự kiện TextBox.KeyDown, nhưng nó có một số vấn đề:

  • tôi không thể biết được nơi các nhân vật đã được bổ sung hoặc xóa.
  • Tôi không biết cách xác định ký tự nào được thêm (từ số KeyEventArgs).

Bất kỳ ý tưởng nào?

Trả lời

8

Tìm giải pháp. Trong WPF, sự kiện TextBox.TextChangedTextChangedEventArgs. Trong lớp học này, có một tài sản có tên là Changes.

Dưới đây là mã của tôi:

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

Bây giờ tôi chỉ cần chờ hai ngày để chấp nhận câu trả lời này. :)

Cảm ơn mọi người.

+1

không, câu trả lời xuất sắc (do đó +1), nhưng tài sản không có trong silverlight (tại sao ?!) –

+1

Thế nào là tất cả ... 'AddCharacter' và' AddString' shenanigans bạn đang làm? Tôi không có những phương pháp đó ... – Pojo

2

Bạn có thể sử dụng phương pháp "brute force" - hộp văn bản (trong winforms và tôi nghĩ trong WPF) có văn bản thay đổi sự kiện bạn có thể sử dụng và bằng cách so sánh văn bản trước sự kiện và văn bản hiện tại bạn có thể tìm nhân vật nào đã được thêm hoặc xóa.

+0

Sẽ không phải là slooooooow? Nó có thể là hai hoặc ba từ nhưng có thể là một tài liệu hoàn chỉnh. –

+0

Mỗi lần chỉ có một nhân vật có thay đổi - vì vậy nó không nên quá chậm - nhưng có ràng buộc là một giải pháp tốt hơn –

Các vấn đề liên quan