Organizational Research By

Surprising Reserch Topic

Question:How to make a textbox accept only digits and formats numbers with commas?


I need a text box that:

(1) only accepts digits as characters.

(2) automatically continues to format numeric values with commas as the user types into it.

For example,

     1 becomes        1.00
    10 becomes       10.00
   100 becomes      100.00
  1000 becomes    1,000.00
 10000 becomes   10,000.00
100000 becomes 1,00,000.00

How to achieve that?

asked Sep 13, 2013 in ANDROID by rajesh
edited Sep 12, 2013
0 votes
56 views



Related Hot Questions

2 Answers

0 votes
Formatting a number while the user is typing in general works very poorly. You should use a MaskedTextBox for that. Plenty of code about on the Internet that shows how to filter KeyPress so only digits can be entered. Most of it is trivially defeated by using the Paste command.

The sane way is to treat the user capable of basic skills like typing a number and gently remind her that she got it wrong. The Validating event is made for that. Which is also the perfect time to format the number. Add a new class to your project and paste this code:

using System;
using System.ComponentModel;
using System.Windows.Forms;

public class NumberBox : TextBox {
    public NumberBox() {
        Fraction = 2;
    }

    public ErrorProvider ErrorProvider { get; set; }

    [DefaultValue(2)]
    public int Fraction { get; set; }

    public event EventHandler ValueChanged;
    public decimal Value {
        get { return this.value; }
        set {
            if (value != this.value) {
                this.value = value;
                this.Text = Value.ToString(string.Format("N{0}", Fraction));
                var handler = ValueChanged;
                if (handler != null) ValueChanged(this, EventArgs.Empty);
            }
        }
    }

    protected override void OnValidating(CancelEventArgs e) {
        if (this.Text.Length > 0 && !e.Cancel) {
            decimal entry;
            if (decimal.TryParse(this.Text, out entry)) {
                if (ErrorProvider != null) ErrorProvider.SetError(this, "");
                Value = entry;
            }
            else {
                if (ErrorProvider != null) ErrorProvider.SetError(this, "Please enter a valid number");
                this.SelectAll();
                e.Cancel = true;
            }
        }
        base.OnValidating(e);
    }

    protected override void OnEnter(EventArgs e) {
        this.SelectAll();
        base.OnEnter(e);
    }

    private decimal value;
}

Compile. Drop the new NumberBox control from the top of the toolbox onto your form. Also drop an ErrorProvider on the form so typing mistakes can be reported in modest way, set the ErrorProvider property of the new control. Optionally modify the Fraction property. You can subscribe the ValueChanged event to know when the value was modified.
answered Sep 13, 2013 by rajesh
edited Sep 12, 2013
0 votes
Formatting a number while the user is typing in general works very poorly. You should use a MaskedTextBox for that. Plenty of code about on the Internet that shows how to filter KeyPress so only digits can be entered. Most of it is trivially defeated by using the Paste command.

The sane way is to treat the user capable of basic skills like typing a number and gently remind her that she got it wrong. The Validating event is made for that. Which is also the perfect time to format the number. Add a new class to your project and paste this code:

using System;
using System.ComponentModel;
using System.Windows.Forms;

public class NumberBox : TextBox {
    public NumberBox() {
        Fraction = 2;
    }

    public ErrorProvider ErrorProvider { get; set; }

    [DefaultValue(2)]
    public int Fraction { get; set; }

    public event EventHandler ValueChanged;
    public decimal Value {
        get { return this.value; }
        set {
            if (value != this.value) {
                this.value = value;
                this.Text = Value.ToString(string.Format("N{0}", Fraction));
                var handler = ValueChanged;
                if (handler != null) ValueChanged(this, EventArgs.Empty);
            }
        }
    }

    protected override void OnValidating(CancelEventArgs e) {
        if (this.Text.Length > 0 && !e.Cancel) {
            decimal entry;
            if (decimal.TryParse(this.Text, out entry)) {
                if (ErrorProvider != null) ErrorProvider.SetError(this, "");
                Value = entry;
            }
            else {
                if (ErrorProvider != null) ErrorProvider.SetError(this, "Please enter a valid number");
                this.SelectAll();
                e.Cancel = true;
            }
        }
        base.OnValidating(e);
    }

    protected override void OnEnter(EventArgs e) {
        this.SelectAll();
        base.OnEnter(e);
    }

    private decimal value;
}

Compile. Drop the new NumberBox control from the top of the toolbox onto your form. Also drop an ErrorProvider on the form so typing mistakes can be reported in modest way, set the ErrorProvider property of the new control. Optionally modify the Fraction property. You can subscribe the ValueChanged event to know when the value was modified.
answered Sep 13, 2013 by rajesh
edited Sep 12, 2013

...