views:

2793

answers:

12
+1  Q: 

Numeric TextBox

Hi,

Im new to programming and I dont know very much about but I'm making a calculator, and i want to use a textbox that only acepts numbers and decimals, and when the user paste text from the clipboard the textbox deletes any literal characters, like the MS calc.

Please take the time to explain each part so I can learn or write it and tell me what to search.

Thanks

EDIT: I'll make it more specific:

How can I make a numeric textbox in C#? I've used the masked textbox but it wont take decimals.

I've read things about overloading the OnKeyPress method so it will correct any wrong characters but I dont know to do it.

A: 

here how to do this in vb.net

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Dim reg As New System.Text.RegularExpressions.Regex("[^0-9_ ]")
    TextBox1.Text = reg.Replace(TextBox1.Text, "")
End Sub

just fix the regex for your specific needs

Fredou
A: 

Research the MaskedTextBox.

The question is a little broad to explain everything. Try to focus the question if you want specifics because you're asking for a lot of the community to "explain each part." If you ask a few specific questions (and exclude the "please the the time to explain..."), you'll get better responses.

Austin Salonen
A: 

As far as I am aware there's nothing native in the .NET framework (2.0 at least) to do this. Your options would be:

  1. Create a custom control which inherits from the textbox control and only allows numeric input. This has the advantage that the control can be reused.
  2. Handle the KeyPress event and check the charCode to only allow numeric keystrokes. This is easier but much less reusable.
Simon
A: 

i would probably use a regular expression to screen out non-numerics.

pseudo code:

for (each item in the input string) {
   if (!match(some regular expression, item)) {
        toss it out
   } else {
        add item to text box or whatever you were going to do with it
   }

}
sweeney
I think some sample code or the actual Regex would be more helpful, as this is targeted at a beginner.
Lucas Jones
+6  A: 

If you look closely, In Windows Calculator, the numbers are shown in a label not a textbox (It does not receive focus). The window receives keyboard events.

So look at KeyPressed and KeyDown events on the form.

Timur Fanshteyn
A: 

You could use a plain textbox or label as the calculator display and just make sure the value (a string?) is always a number. For instance, you could keep a double and convert it to a string when you wish to display it.

Albert
A: 

Being a novice you might be better off investing in a good third party toolkit. Radcontrols from Telerik for instance has a numeric textbox that will accomplish what you are looking for.

Nathan
No way! Being a novice he should definetly try to figure out how to do it himself. In fact, he'd be better off searching for an appropriate solution than just asking us here at SO. So much of being a good programmer is figuring out how to find the best approach.
Todd Friedlich
+2  A: 

Here's a full article on Numeric Edit Control in c#. Enjoy

http://www.codeproject.com/KB/edit/TNumEditBox.aspx

Timur Fanshteyn
A: 

Thanks all, It seems like i need a lot learn I'll start searching now.

What does the "!" means?

Thank you.

Ricardo
Not sure what you mean...! is a form of punctuation signifying enthusiasm. But in code, it generally means "NOT".
Todd Friedlich
A: 

There is a control in the framework which is specially made for numeric input : the NumericUpDown control. It also manages decimal values.

Guulh
+2  A: 

Add an event handler for the textbox you want to be numeric only, and add the following code:

private void textBoxNumbersOnly_KeyPress(object sender, KeyPressEventArgs e)
{
   if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
   {
      e.Handled = false;
   }
   else
   {
      e.Handled = true;
   }
}

This allows for numbers 0 to 9, and also backspaces (useful IMHO). Allow through the '.' character if you want to support decimals

A: 
        if ("1234567890".IndexOf(e.KeyChar.ToString()) > 0)
        {
            e.Handled = false;
        }
        else
        {
            e.Handled = true;
        }
Swoosh