Restreindre caractères autorisés dans TextBox (Saisie d'argent Montant)
Question
J'ai un sous-total TextBox où un tel montant 546,75 $ peut être saisi. Maintenant, je veux faire en sorte que des chiffres, une décimale, un dollar Symbole et les virgules autorisées que tous les 3 places (100.000.000). Est-ce possible? Peut-être pas les virgules, mais au moins les nombres, décimal et le symbole du dollar.
La solution
Je pense que vous utilisez WinForms et non WPF. Si tel est le cas, alors vous pouvez utiliser System.Windows.Forms.ErrorProvider (vous pouvez l'une de boîte à outils à votre formulaire glisser-déposer) ainsi que des expressions régulières pour faire la validation.
AVERTISSEMENT:. La chaîne de motif regex ci-dessous ne peut pas faire exactement vous voulez, mais je l'espère véhicule l'idée
Quelques exemples de match ... "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);
}
Autres conseils
Pourquoi vous ne mettez le signe de l'argent « $ » hors côté de la zone de texte (créer une étiquette juste infrontof textBox), alors vous ne serez pas à vous soucier de ce caractère, mais seulement sur les chiffres. Et il semble mieux (à mon avis). Ensuite, vous pouvez utiliser ce code:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
{
e.Handled = !char.IsNumber(e.KeyChar);
}
}
Toutes validation doit être effectuée manuellement sur pression de touche.
validation décrit ici numérique les valeurs des valeurs. Vous aurez besoin de vérifier le signe « $ » et décimaux en plus.
Il y a un certain nombre d'articles sur les zones de texte numériques
numérique TextBox
http://www.daniweb.com/software-development/csharp / fils / 95153
http://www.codeproject.com/KB/vb/NumericTextBox.aspx
J'utilise celui-ci dans mes projets
http://www.codeproject.com/KB/edit/ValidatingTextBoxControls.aspx
// tb - est le nom de la zone de texte
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;
}
// une autre méthode.
if (char.IsDigit(inputChar[0]))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
Avez-vous essayé les contrôles Ajax?
http://www.aspsnippets.com/Articles/ ASPNet-AJAX-FilteredTextBoxExtender-Control-Example.aspx
Simples. :)