Interceptar las teclas del teclado en un TextBox
Artículo por Club Developers · 09 mayo 2006
2325 vistas
Vamos a ayudarnos de los eventos de las teclas. Estos se producen cuando el TextBox tiene el foco y en el orden siguiente:
Veamos un ejemplo de uso:
Creamos un proyecto WinForm C#, le añadimos 2 TextBox (textBox1 y textBox2) al form principal (Form1) y el código siguiente para que las teclas pulsadas en textBox1 se representen en textBox2
- KeyDown: la tecla se ha presionado
- KeyPress: se dispara si la tecla representa un carácter.
- KeyUp: la tecla se ha soltado
Veamos un ejemplo de uso:
Creamos un proyecto WinForm C#, le añadimos 2 TextBox (textBox1 y textBox2) al form principal (Form1) y el código siguiente para que las teclas pulsadas en textBox1 se representen en textBox2
csharp
// KeyPress Handler private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { // mostramos los carácteres imprimibles if (!char.IsControl(e.KeyChar)) textBox2.Text = textBox1.Text.Substring(0, textBox1.SelectionStart) + e.KeyChar.ToString() + textBox1.Text.Substring(textBox1.SelectionStart + textBox1.SelectionLength); } // KeyDown Handler private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { // Gestión tecla Back if (e.KeyCode == Keys.Back && textBox1.Text.Length > 0) { if (textBox1.SelectionLength > 0) { // borramos selección textBox2.Text = textBox1.Text.Substring(0, textBox1.SelectionStart) + textBox1.Text.Substring(textBox1.SelectionStart + textBox1.SelectionLength); } else if (textBox1.SelectionStart > 0) { // borramos carácter anterior al cursor if (textBox1.SelectionStart == textBox1.Text.Length) textBox2.Text = textBox1.Text.Substring(0, textBox1.Text.Length-1); else textBox2.Text = textBox1.Text.Substring(0, textBox1.SelectionStart-1) + textBox1.Text.Substring(textBox1.SelectionStart + textBox1.SelectionLength); } } // Tecla Delete (suppr) else if (e.KeyCode == Keys.Delete && textBox1.Text.Length > 0) { // el cursor está a final de cadena if (textBox1.SelectionStart == textBox1.Text.Length) { // borrado último carácter por Shift+Del if (e.Shift) textBox2.Text = textBox1.Text.Substring(0, textBox1.Text.Length-1); } else { // tomamos todos los carácteres a la izquierda del cursor textBox2.Text = textBox1.Text.Substring(0, textBox1.SelectionStart); if (textBox1.SelectionLength != 0) // borramos selección textBox2.AppendText(textBox1.Text.Substring(textBox1.SelectionStart + textBox1.SelectionLength)); else { // si se pulsa la tecla Control, borramos todos los carácteres a la derecha del cursor, // sino, borramos sólo uno if (!e.Control) textBox2.Text = textBox1.Text.Substring(0, textBox1.SelectionStart) + textBox1.Text.Substring(textBox1.SelectionStart+1); } } } // pegar (Ctrl+V) o (Shift+insert). else if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V)) { // datos en el porta papeles IDataObject cpdata = Clipboard.GetDataObject(); // miramos si cpdata contiene texto if (cpdata != null && cpdata.GetDataPresent(string.Empty.GetType())) { string data = cpdata.GetData(string.Empty.GetType()).ToString(); bool print = false; // gestión de carácteres no imprimibles (como la tabulación por ejemplo) for (int i=0; i<data.Length-1; i++) { if (char.IsControl(data, i) && print) { data = data.Substring(0, i); break; } else if (!char.IsControl(data, i) && !print) print = true; } textBox2.Text = textBox1.Text.Substring(0, textBox1.SelectionStart) + data + textBox1.Text.Substring(textBox1.SelectionStart + textBox1.SelectionLength); } } }