2010-04-04 23 views
6

Tengo un cuadro de texto simple en una aplicación WPF.Determine cuándo y qué carácter se agrega o elimina en un cuadro de texto

necesito saber cuando se añadió un carácter/borrado en el cuadro de texto, el cual carácter y donde se añadió o se borran.

pensé en utilizar el evento TextBox.KeyDown, pero tiene algunos problemas:

  • no puede saber dónde se añade o se elimina el carácter.
  • No tengo idea de cómo determinar qué carácter se agregó (desde KeyEventArgs).

¿Alguna idea?

Respuesta

8

Encontré la solución. En WPF, el evento TextBox.TextChanged tiene un TextChangedEventArgs. En esta clase, hay una propiedad llamada Changes.

Aquí está mi código:

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

Ahora sólo hay que esperar dos días para aceptar esta respuesta. :)

Gracias de todos modos.

+1

no, respuesta brillante (por lo tanto, +1), pero la propiedad no está en Silverlight (¿por qué ?!) –

+1

¿Qué es todo esto ... las travesuras de 'AddCharacter' y' AddString' que estás haciendo? No tengo esos métodos ... – Pojo

2

Puede usar un método de "fuerza bruta": el cuadro de texto (en winforms y también en WPF) tiene un evento de texto modificado que puede usar y al comparar el texto antes del evento y el texto actual puede encontrar qué personaje se ha agregado o eliminado.

+0

¿No sería slooooooow? Puede ser de dos o tres palabras, pero puede ser un documento completo. –

+0

Cada vez solo un carácter tiene cambios, por lo que no debería ser demasiado lento, pero debe haber una solución mejor –

Cuestiones relacionadas