Estoy trabajando en una aplicación web Silverlight. Interactúa con un módulo que envía SMS. Quiero limitar el texto a 160 y mostrar un contador. Lo hice así:Detección de retroceso en KeyDown
public partial class SendSMSView
{
public SendSMSView()
{
InitializeComponent();
ApplyTheme();
}
protected void tbMessage_KeyDown(object sender, KeyEventArgs e)
{
count = 160 - this.tbMessage.Text.Length;
this.lblCount.Content = count.ToString();
}
}
Esto funciona bien para todas las teclas excepto para retroceder y eliminar. Por supuesto, está hecho para funcionar así. Cavé más en este caso y trató de anular keydown por lo que añade el siguiente fragmento de código:
public class CustomTextBox : TextBox
{
public CustomTextBox(): base()
{
}
protected override void OnKeyDown(KeyEventArgs e)
{
e.handler=false;
base.OnKeyDown(e);
//this place
}
}
En función OnKeyDown consigo todas las pulsaciones de teclas registradas. Establecer Handler en false aquí no ayuda y todavía no puedo tener retroceso para activar tbMessage_KeyDow.
Quiero de alguna manera llamar a la función tbMessage_KeyDow desde // este lugar con fuerza desde allí para el retroceso.
Busqué en MSDN, y encontré que IsInputKey puede ser reemplazado para que sea verdadero, de modo que onKeyDown responda a él también, pero My framework no tiene IsInputKey ni PreviewKeyPress. ¿Hay alguna solución para obtener la clave de retroceso registrada como clave de entrada, o para llamar a tbMessage_KeyDow [que es un enfoque muy crudo]? Por favor ayuda.
Dado que está utilizando los espacios posteriores 'this.tbMessage.Text.Length' y eliminar se reflejará en la cadena' Text'. ¿O quieres decir algo más? – Stefan
¿por qué no utiliza el evento [textchanged] (http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged%28v=vs.95%29.aspx) en lugar de la combinación de teclas? solo cuente el contenido de la caja de texto cada vez que cambie – weberik
Gracias. TextChanged funcionó, después de un poco de manipulación. – whizzyifti