Search code examples
c#textboxmaxminimumnumericupdown

NumericUpDown allows user to type a number greater than maximum


I have a NumericUpDown variable in my class. The minimum and maximum values are set as follows:

myNumericUpDown.Maximum = 9999;
myNumericUpDown.Minimum = 0;

This prevents the spin box from exceeding 9999 or going below 0.

The problem I am having is when the user types inside the text box they can type any arbitrary number greater than Maximum or less than Minimum.

Is there a property in the NumericUpDown class that controls the minimum and maximum values for the text box? Or do I have to write a callback procedure that checks for this condition?


Solution

  • If you set the property in the properties pane in the forms design view it will handle this for you. If the user were to enter 12000 and you had a maximum of 9999, as soon as the control loses focus the control drops to its maximum value of 9999. It goes the same with a negative value. It would automatically go to 0 once the control loses focus.

    If you didn't want a user to be able to enter more than 4 digits, then you could just watch the KeyDown Event.

        /// <summary>
        /// Checks for only up to 4 digits and no negatives
        /// in a Numeric Up/Down box
        /// </summary>
        private void numericUpDown1_KeyDown(object sender, KeyEventArgs e)
        {
            if (!(e.KeyData == Keys.Back || e.KeyData == Keys.Delete))
                if (numericUpDown1.Text.Length >= 4 || e.KeyValue == 109)
                {
                    e.SuppressKeyPress = true;
                    e.Handled = true;
                }
        }