Click here to Skip to main content
12,548,496 members (53,919 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as


24 bookmarked

Numeric TextBox

, 22 Sep 2008 CPOL
Rate this:
Please Sign up or sign in to vote.
The textbox that accepts numbers and uses separated character for reading easily


I needed one textbox that accepts a number and uses separated character on each three numbers as right.

I searched for this on The Code Project, but couldn't find any such article. So I decided to create this one.

Notice: Numeric TextBox is not MasktextBox, this textBox is dynamic but masktextbox is static. When you changing a number, the position of the separated character changes.

Using the Code


Add numericTextBox in your project, then drag and drop on the form.

Numeric Textbox contains these properties:

  1. MaxValue: With this property, you could enter max of a number as per your requirement.
  2. Invalidsound: In this property, you could set invalid sound for when the user presses the wrong key, e.g. when pressing a letter character.
  3. SeparatedChar: A separated character is a character that is placed between numbers. Default of separated character is ",".
  4. Value: The value of a numeric textbox that you see has Int64 type. When you want to use Int32 type, use this:

How It Works

NumericTextBox is a textbox that manages the keyPressed event:

protected override void OnKeyPress(KeyPressEventArgs e)
            isKeyPress = true;
            double val = (this.Text.Length == 0 ? 0 : 
		        double.Parse(this.Text.Replace(sepratedChar.ToString(), "")));

            if (Char.IsDigit(e.KeyChar) && val * 10 + 
			int.Parse(e.KeyChar.ToString()) <= maxValue)
                // Digits are OK
            else if (e.KeyChar == '\b')
                // Backspace key is OK

            else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0)
                //ModifierKeys + ( Alt & Ctrl ) are OK
            else if (this.SelectionLength > 0)
                // Selected Text OK

                e.handle = true;

Then when text is changed, call SetSepratedChar procedure, in SetSepratedChar while  Value>1000, divide by 1000 and insert SeparatedChar but it's different between digits and Del Key and backspace button, because selectionstart is a different position.

private void SetSepratedChar(int index)
	isKeyPress = false;
	isDelKeyPress = false;
	Int64 intValue = Value;
	int selectionStart = this.SelectionStart;

	while (intValue >= 1000)
		Int64 mod = intValue % 1000;
		if (mod == 0)
		this.Text = this.Text.Insert(0, sepratedChar.ToString() + "000");
		else if (mod.ToString().Length == 1)this.Text = 
		this.Text.Insert(0, sepratedChar.ToString() + "00" + mod.ToString());

		else if (mod.ToString().Length == 2)
			this.Text = this.Text.Insert(0, 
			sepratedChar.ToString() + "0" + mod.ToString());
			this.Text = this.Text.Insert(0, 
			sepratedChar.ToString() + mod.ToString());

		intValue = intValue / 1000;

	this.Text = this.Text.Insert(0, intValue.ToString());
	this.SelectionStart = selectionStart + index;

I needed an integer number, but if you think this component is useful for decimal numbers, please let me know.

Please give me some tips.



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Ehsan Golkar
Iran (Islamic Republic of) Iran (Islamic Republic of)
No Biography provided

You may also be interested in...

Comments and Discussions

Questionhi Pin
Member 101936566-Aug-13 19:05
memberMember 101936566-Aug-13 19:05 
AnswerRe: hi Pin
Ehsan Golkar6-Aug-13 19:58
memberEhsan Golkar6-Aug-13 19:58 
GeneralRe: hi Pin
Member 101936566-Aug-13 21:23
memberMember 101936566-Aug-13 21:23 
GeneralRe: hi Pin
Ehsan Golkar6-Aug-13 21:28
memberEhsan Golkar6-Aug-13 21:28 
GeneralMy vote of 5 Pin
MP5910-Aug-12 21:56
memberMP5910-Aug-12 21:56 
GeneralRe: My vote of 5 Pin
Ehsan Golkar20-Jan-13 19:59
memberEhsan Golkar20-Jan-13 19:59 
Questionعالی بود Pin
haidreza15-Jun-12 21:34
memberhaidreza15-Jun-12 21:34 
AnswerRe: عالی بود Pin
Ehsan Golkar10-Jan-13 3:05
memberEhsan Golkar10-Jan-13 3:05 
Generalvery good Pin
DearMadalin29-Sep-08 20:47
memberDearMadalin29-Sep-08 20:47 
GeneralMessage Removed Pin
Ehsan Golkar30-Sep-08 2:33
memberEhsan Golkar30-Sep-08 2:33 
GeneralRe: very good Pin
DearMadalin5-Oct-08 16:09
memberDearMadalin5-Oct-08 16:09 
GeneralInternationalization Pin
TobiasP29-Sep-08 7:14
memberTobiasP29-Sep-08 7:14 
GeneralRe: Internationalization Pin
Ehsan Golkar29-Dec-08 6:54
memberEhsan Golkar29-Dec-08 6:54 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.161021.1 | Last Updated 22 Sep 2008
Article Copyright 2008 by Ehsan Golkar
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid