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.

Était-ce utile?

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.

// 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;
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top