Restringir los caracteres permitidos en el cuadro de texto (ingresar la cantidad de dinero)
Pregunta
Así que tengo un cuadro de texto subtotal donde se puede ingresar una cantidad como $ 546.75. Ahora, quiero asegurarme de que solo los números, un decimal, un símbolo de un dólar y comas permitan solo cada 3 lugares (100,000,000). es posible? Tal vez no las comas, sino al menos los números, el decimal y el símbolo del dólar.
Solución
Creo que estás usando WinForms y no WPF. Si ese es el caso, puede usar System.Windows.Forms.ErrorProvider (puede arrastrar uno desde la caja de herramientas a su formulario) junto con expresiones regulares para hacer la validación.
ADVERTENCIA: La cadena de patrón Regex a continuación puede no hacer exactamente que desee, pero con suerte transmite la idea.
Algunos ejemplos de partidos ... "$ 4,000.00", "-$ 4000.00", "-$ 400.00"
private void textBox1_Validating(object sender, CancelEventArgs e)
{
string error = null;
string pattern = @"^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$";
if (!Regex.IsMatch(textBox1.Text, pattern))
{
error = "Please enter a US currency value.";
e.Cancel = true;
}
errorProvider1.SetError((Control)sender, error);
}
Otros consejos
Por qué no pone el lado de la señal de dinero "$" del cuadro de texto (cree una etiqueta just defrontOf Textbox), entonces no tendrá que preocuparse por este personaje, sino solo por los números. Y se ve mejor (en mi opinión). Entonces puede usar este código:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
{
e.Handled = !char.IsNumber(e.KeyChar);
}
}
Toda la validación debe realizarse manualmente en el evento KeyPress.
Aquí Validación descrita para valores numéricos valores. Deberá verificar el signo '$' y los decimales adicionalmente.
Hay una serie de artículos en cuadros de texto numéricos.
http://www.daniweb.com/software-development/csharp/threads/95153
http://www.codeproject.com/kb/vb/numerictextbox.aspx
Yo uso este en mis proyectos
http://www.codeproject.com/kb/edit/validatingTextBoxControls.aspx
// tb - es el nombre del cuadro de texto
private void tb_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
char[] inputChar = e.Text.ToCharArray();
if (char.IsNumber(inputChar[0]))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
// otro método.
if (char.IsDigit(inputChar[0]))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
¿Has probado los controles AJAX?
http://www.aspsnippets.com/articles/aspnet- Ajax-filteredTextboxextender-control-example.aspx
Simplos. :)