Dejare aqui un mini tutorial para formatear un RUT chileno con separadores de miles el guion para el digito verificador.
OJO que NO VALIDA el RUT.
Entonces, a nuestro TextBox le agregaremos dos Eventos: KeyPress (solo permitira ciertos caracteres) y KeyUp (ejecutara el formateo).
Ejemplo, ingresamos el 19 y debe devolver 1-9:
Al momento de escribir, se validan que solo sean carecteres permitidos (KeyPress) y por cada caracter (KeyUp) se llama a la funcion FormatearRut para la ejecucion final.
Resultado final en Pantalla:
Aca dejo el codigo Csharp para los eventos y la funcion que hace el formato.
// solo numeros, puntos, guion y letra K private void txtRUT_KeyPress(object sender, KeyPressEventArgs e) { if (Char.IsDigit(e.KeyChar)) { e.Handled = false; } else if (e.KeyChar.ToString().ToUpper().Equals("K")) { e.Handled = false; } else if (e.KeyChar.ToString().ToUpper().Equals("-")) { e.Handled = false; } else if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso { e.Handled = false; } else { //el resto de teclas pulsadas se desactivan e.Handled = true; } }
// ejecuta el formateo con cada tecla que presionemos private void txtRUT_KeyUp(object sender, KeyEventArgs e) { txtRUT.Text = FormatearRut(txtRUT.Text); txtRUT.SelectionStart = txtRUT.Text.Length; txtRUT.SelectionLength = 0; }
// rutina que formatea con separadores de miles y agrega el guion public static string FormatearRut(string rut) { string rutFormateado = string.Empty; if (rut.Length == 0) { rutFormateado = ""; } else { string rutTemporal; string dv; Int64 rutNumerico; rut = rut.Replace("-", "").Replace(".", ""); if (rut.Length == 1) { rutFormateado = rut; } else { rutTemporal = rut.Substring(0, rut.Length - 1); dv = rut.Substring(rut.Length - 1, 1); //aqui convierto a un numero el RUT si ocurre un error lo deja en CERO if (!Int64.TryParse(rutTemporal, out rutNumerico)) { rutNumerico = 0; } //este comando es el que formatea con los separadores de miles rutFormateado = rutNumerico.ToString("N0"); if (rutFormateado.Equals("0")) { rutFormateado = string.Empty; } else { //si no hubo problemas con el formateo agrego el DV a la salida rutFormateado += "-" + dv; //y hago este replace por si el servidor tuviese configuracion anglosajona y reemplazo las comas por puntos rutFormateado = rutFormateado.Replace(",", "."); } } } return rutFormateado; }
TYDW.-