Search code examples
c#decimalnumericupdown

NumericUpDown: accept both comma and dot as decimal separator


There's a way to force c# NumericUpDown to accept both comma and dot, to separate decimal values?

I've customized a textbox to do it (practically replacing dots with commas), but I'm surprised that there isn't another way..

This question explains how to change the separator, but I would like to use both!


Solution

  • NumericUpDown control uses the culture of the operating system to use comma or dots as a decimal separator.

    If you want to be able to handle both separators and consider them as a decimal separator (ie: not a thousand separator), you can use Validation or manual event treatment, for example:

    private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.Equals('.') || e.KeyChar.Equals(','))
            {
                e.KeyChar = ((System.Globalization.CultureInfo)System.Globalization.CultureInfo.CurrentCulture).NumberFormat.NumberDecimalSeparator.ToCharArray()[0];
            }
        }
    

    In this example you will replace every dot and comma by the NumericDecimalSeparator of the current culture