Domanda

Così ho un TextBox subtotale in cui è possibile inserire un importo come $ 546,75. Ora, voglio fare in modo che solo i numeri, un decimale, Un Simbolo del dollaro e le virgole consentito solo ogni 3 posti (100.000.000). È possibile? Forse non le virgole, ma almeno il numero, decimale e il simbolo del dollaro.

È stato utile?

Soluzione

Penso che si sta utilizzando WinForms e non WPF. Se questo è il caso, allora si potrebbe usare System.Windows.Forms.ErrorProvider (è possibile trascinare-drop uno dalla cassetta degli attrezzi al form), insieme con le espressioni regolari per fare la convalida.

. ATTENZIONE: La stringa di modello di espressione regolare di seguito non può fare esattamente si vuole, ma si spera trasmette l'idea

Alcuni esempi partita ... "$ 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);
    }

Altri suggerimenti

Perché tu non mettere il segno soldi "$" fuori dal lato del controllo TextBox (crea un'etichetta solo infrontof textBox), allora non dovete preoccuparvi di questo personaggio, ma solo sui numeri. E sembra migliore (a mio parere). Quindi è possibile utilizzare questo codice:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
        {
            e.Handled = !char.IsNumber(e.KeyChar);
        }
    }

Tutti convalida deve essere effettuata manualmente su evento Pressione.

convalida Qui descritto per numerico valori valori. Sarà necessario verificare il segno '$' e decimali in aggiunta.

// tb - è il nome della casella di testo

    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;
        }

// un altro metodo.

        if (char.IsDigit(inputChar[0]))
        {
            e.Handled = false;
        }
        else
        {
            e.Handled = true;
        }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top