I want that a user only enters numeric data into the textbox in a windows form. How can I achieve this?
3 Answers
The easiest way would be to use a MaskedTextBox (use the Mask property) or a NumericUpDown control. If you really need fine-grained control that these controls do not provide, handle the KeyPress and other appropriate events of the TextBox control as required.
EDIT: Clarified that KeyPress is not the only relevant event, as mentioned by ho1.
1 Comment
MaskedTextBox or NumericUpDown since if you would go for the KeyPress handling etc, you might have to deal with TextChanged or something similar as well, in case text gets entered into the textbox without the use of the keyboard (copy and paste using the mouse or another app sending text into there etc). And you have to remember all the keys that you have to handle, not just digits (backspace?, comma?, dot?).What do you want to happen when the user attempts to enter a non-numeric value? Does this matter before a data submission attempt? Without entering your code block every time a key is pressed, I think it'd be cleaner to just let the user enter non-numerics and validate either when the form is submitted and/or when the text box loses focus. Then if validation fails, notify the user of the strict numeric format. This would be less invasive to a user, rather than interrupting.
As for validation, just use either regular expressions or try to parse the text box's text as an integer.
Regular Expression
System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"^\d$");
Integer Parse
int validNumbers = 0;
bool isValid = int.TryParse(myTextBox.Text, out validNumbers);
Comments
First it depends on what kind of numeric data you want to allow. (Integer, Double, ..., or something app-specific? Like an ISBN or something?)
Short:
The easiest way would be like Ani said, but if you need a more specific way, you should subcribe an matching Event. For Example TextBox.Validating, TextBox.OnLeave, TextBox.OnTextChange... depends on when you want to test the matching.
Than you can test in the Eventhandler whatever you want, even RegEx would be possible for complex alphanumeric data.
PS: You should really have a look at http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating.aspx