visual solo restringir que punto numeros ingresar decimales caracteres acepte c# numbers comma restrict

numeros - Cómo restringir el cuadro de texto en C#para que solo reciba números y(punto "." O coma ","), después de "." O "," solo permita 2 caracteres numéricos



textbox solo numeros c# (3)

Estoy tratando de desarrollar un código para restringir TextBox usando C # para permitir sólo la entrada de números + coma (",") o punto (".") + solo 2 números después de punto o coma Para ver números posibles que pueden ingresar:

3213,04 = OK 3211,664 = Not 32.31 = OK 32.3214 = Not 334,,00 = Not 3247,.00 = Not 214.,00 = Not 32.. = Not 8465,0 = Ok 654.0 = Ok

Entendido ¿Mi objetivo? Desarrollé el código abajo

private void txtValormetrocubico_KeyPress(object sender, KeyPressEventArgs e) { if (txtValormetrocubico.TextLength >= 0 && (e.KeyChar == (char)Keys.OemPeriod || e.KeyChar == (char)Keys.Oemcomma)) { //tests } else { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != ''.'' && e.KeyChar != '','') { e.Handled = true; } // only allow one decimal point if (e.KeyChar == ''.'' && (sender as TextBox).Text.IndexOf(''.'') > -1) { e.Handled = true; } if (e.KeyChar == '','' && (sender as TextBox).Text.IndexOf('','') > -1) { e.Handled = true; } } }


¡Prueba este código! Espero que esto ayude. Avíseme si puedo ayudarlo más.

Esta es la función auxiliar que he escrito

private bool alreadyExist(string _text , ref char KeyChar) { if (_text.IndexOf(''.'')>-1) { KeyChar = ''.''; return true; } if (_text.IndexOf('','') > -1) { KeyChar = '',''; return true; } return false; }

Este es el controlador de eventos de tu llave de prensa

private void txtValormetrocubico_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != ''.'' && e.KeyChar != '','') { e.Handled = true; } //check if ''.'' , '','' pressed char sepratorChar=''s''; if (e.KeyChar == ''.'' || e.KeyChar == '','') { // check if it''s in the beginning of text not accept if (txtValormetrocubico.Text.Length == 0) e.Handled = true; // check if it''s in the beginning of text not accept if (txtValormetrocubico.SelectionStart== 0 ) e.Handled = true; // check if there is already exist a ''.'' , '','' if (alreadyExist(txtValormetrocubico.Text , ref sepratorChar)) e.Handled = true; //check if ''.'' or '','' is in middle of a number and after it is not a number greater than 99 if (txtValormetrocubico.SelectionStart != txtValormetrocubico.Text.Length && e.Handled ==false) { // ''.'' or '','' is in the middle string AfterDotString = txtValormetrocubico.Text.Substring(txtValormetrocubico.SelectionStart); if (AfterDotString.Length> 2) { e.Handled = true; } } } //check if a number pressed if (Char.IsDigit(e.KeyChar)) { //check if a coma or dot exist if (alreadyExist(txtValormetrocubico.Text ,ref sepratorChar)) { int sepratorPosition = txtValormetrocubico.Text.IndexOf(sepratorChar); string afterSepratorString = txtValormetrocubico.Text.Substring(sepratorPosition + 1 ); if (txtValormetrocubico.SelectionStart > sepratorPosition && afterSepratorString.Length >1) { e.Handled = true; } } } }



Bueno, puede crear una función general y llamarlo al evento de keypress de keypress este código es una instancia general.

validate_textBox es una función general

private void validate_textBox(TextBox _text, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != ''.'' && e.KeyChar != '','') { e.Handled = true; } if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != ''.'' && e.KeyChar != '','') { e.Handled = true; } //check if ''.'' , '','' pressed char sepratorChar = ''s''; if (e.KeyChar == ''.'' || e.KeyChar == '','') { // check if it''s in the beginning of text not accept if (_text.Text.Length == 0) e.Handled = true; // check if it''s in the beginning of text not accept if (_text.SelectionStart == 0) e.Handled = true; // check if there is already exist a ''.'' , '','' if (alreadyExist(_text.Text, ref sepratorChar)) e.Handled = true; //check if ''.'' or '','' is in middle of a number and after it is not a number greater than 99 if (_text.SelectionStart != _text.Text.Length && e.Handled == false) { // ''.'' or '','' is in the middle string AfterDotString = _text.Text.Substring(_text.SelectionStart); if (AfterDotString.Length > 2) { e.Handled = true; } } } //check if a number pressed if (Char.IsDigit(e.KeyChar)) { //check if a coma or dot exist if (alreadyExist(_text.Text, ref sepratorChar)) { int sepratorPosition = _text.Text.IndexOf(sepratorChar); string afterSepratorString = _text.Text.Substring(sepratorPosition + 1); if (_text.SelectionStart > sepratorPosition && afterSepratorString.Length > 1) { e.Handled = true; } } } }

Luego puede llamar a la función como este código para cada cuadro de texto que tenga en la forma

private void txtValormetrocubico_KeyPress(object sender, KeyPressEventArgs e) { validate_textBox(sender as TextBox, e); } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { validate_textBox(sender as TextBox, e); }