Click here to Skip to main content
16,021,041 members
Articles / Programming Languages / C#
Article

Custom Control: Numeric TextBox: TextBox that alow you to enter only numbers

Rate me:
Please Sign up or sign in to vote.
2.10/5 (9 votes)
29 Jan 2007 55.8K   14   11
Sometimes we need to control the user input to some specific values. The following article explain how to do this with a TextBox

Introduction

Sometimes we need to control the user input. This control is a normal TextBox, with the property that the control accept only numeric values!

because this control is a TextBox, we inherit from the base class like this NumericTextBox : TextBox

What we have to do is to override the events OnKeyPress and OnKeyDown for the control. The full code is this:

C#
using System.Windows.Forms;
using System.ComponentModel;

namespace MyCustomControls
{
    [Description("Numeric TextBox")]
    public class NumericTextBox : TextBox
    {
        private bool nonNumberEntered = false;

        public NumericTextBox()
        {
            this.Width = 150;
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (nonNumberEntered == true)
            {
                e.Handled = true;
            }
        }
        protected override void OnKeyDown(KeyEventArgs e)
        {
            nonNumberEntered = false;
            if (e.Shift == true || e.Alt == true)
            {
                nonNumberEntered = true;
                return;
            }
            if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
            {
                if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
                {
                    if (e.KeyCode != Keys.Back)
                    {
                        nonNumberEntered = true;
                    }
                }
            }
        }
    }
}


Now, all we have to do is to use it in our application.
This code can be improved. Now it's possible to Paste from clipboard non numeric values. Next version (I'll write this in few days) will contain this improvements!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Engineer
Israel Israel
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 1 Pin
Ahmed_Said11-Jan-12 10:45
Ahmed_Said11-Jan-12 10:45 
QuestionPerfect solution Numeric TextBox Pin
Asif Rehman11-Sep-11 23:08
Asif Rehman11-Sep-11 23:08 
GeneralThis is better than your Article Pin
Ehsan Golkar28-Sep-08 2:26
Ehsan Golkar28-Sep-08 2:26 
GeneralNumeric Up/Down Pin
sabrown10018-Oct-07 7:24
sabrown10018-Oct-07 7:24 
QuestionMSDN?? Pin
jubjubjub18-Aug-07 6:13
jubjubjub18-Aug-07 6:13 
GeneralMasked Edit Pin
Not Active29-Jan-07 7:06
mentorNot Active29-Jan-07 7:06 
GeneralKeyDown not needed [modified] Pin
Luc Pattyn29-Jan-07 6:54
sitebuilderLuc Pattyn29-Jan-07 6:54 
GeneralRe: KeyDown not needed Pin
LimitedAtonement2-Nov-09 7:44
LimitedAtonement2-Nov-09 7:44 
GeneralUseful Pin
Ilíon29-Jan-07 4:25
Ilíon29-Jan-07 4:25 
GeneralRe: Useful Pin
zeltera29-Jan-07 4:32
zeltera29-Jan-07 4:32 
GeneralRe: Useful Pin
Ilíon29-Jan-07 5:33
Ilíon29-Jan-07 5:33 
"in article from here: thecodeproject.com are only few words about this. Is not a functional control."
Certainly it is. The author didn't list his entire code in the article, but it is all there in the download.

"And it's very easy to change the permitted content"
The basic concept of the article I pointed you toward is even easier to use ... once one is able to figure out the RegularExpression one needs to use to get the desired result ... because one doesn't have to change and recompile the code of one's control; one doesn't need to have one assembly for numerics-only and a separate one for alphabetics-only and a separate one for alphanumerics only and a separate one for [and so on].

Naturally, the code in the project I referenced can be improved; I didn't point to it as being the only and perfect way to accomplish your goal.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.