Limitare caratteri consentiti in TextBox (Inserimento di denaro Amount)
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.
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.
Ci sono una serie di articoli su caselle di testo numerici
http://www.daniweb.com/software-development/csharp / discussioni / 95153
http://www.codeproject.com/KB/vb/NumericTextBox.aspx
Io uso questo nei miei progetti
http://www.codeproject.com/KB/edit/ValidatingTextBoxControls.aspx
// 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;
}
}
Hai provato controlli AJAX?
http://www.aspsnippets.com/Articles/ ASPNet-AJAX-FilteredTextBoxExtender-Control-Example.aspx
Semplici. :)