Home > other >  TextBox input validation, numbers only
TextBox input validation, numbers only

Time:02-21

Good day. I'm having a hard time with this. TextBox1 should only accept numbers and if the user input a text, a message box will pop-up saying that only numbers can be entered.

I don't know how to do this since the message box should pop-up without clicking any button.

The user will just really enter numbers and if they enter non numerical value the message box will appear instantly.

Is this even possible?

I've tried the KeyPress events but I can still input letters. Please help.

CodePudding user response:

This is a very standard implementation, with a minor twist of including a dialog box. In general a dialog box is just going to annoy the user and take the focus away from the form, it breaks the flow of the user interaction so we try to avoid it, however you can adapt the standard example listed in the MS Docs - KeyEventHandler Delegate documentation:

// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;

// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    // Initialize the flag to false.
    nonNumberEntered = false;

    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if(e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
    //If shift key was pressed, it's not a number.
    if (Control.ModifierKeys == Keys.Shift) {
        nonNumberEntered = true;
    }
}
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    // Check for the flag being set in the KeyDown event.
    if (nonNumberEntered == true)
    {
        // Stop the character from being entered into the control since it is non-numerical.
        e.Handled = true;
        MessageBox.Show("Only numeric input is accepted");
    }
}

Using the KeyEventArgs in this manner allows you access to the raw physical key that was pressed, and to separately prevent the textbox from accepting the key press.

This style of code is very useful when 3rd party controls (or your own code) has overriden the standard implementations. It is however possible to do it all in the KeyPress event handler:

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    // Check for the flag being set in the KeyDown event.
    if (!Char.IsNumber(e.KeyChar) && e.KeyChar != '.')
    {
        // Stop the character from being entered into the control since it is non-numerical.
        e.Handled = true;
        MessageBox.Show("Only numeric input is accepted");
    }
}

But that could still allow us to enter a value of "12.333...44..5" so a more complete example should extend one of the previous examples and compare against the current value in the textbox:

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    // Check for the flag being set in the KeyDown event.
    bool isNumber = Char.IsNumber(e.KeyChar);
    if (e.KeyChar == '.')
    {
       isNumber = !(sender as TextBox).Text.Contains(".");
    }

    if (!isNumber)
    {
        // Stop the character from being entered into the control since it is non-numerical.
        e.Handled = true;
        MessageBox.Show("Only numeric input is accepted");
    }
}

CodePudding user response:

Write Key down event

private void input_KeyDown(object sender, KeyEventArgs e)
{
        bool chknm = true;
        foreach (char c in input.text)
        {
            if (!(c >= '0' && c <= '9')) {
                blnisnumber = false;
                if(blnisnumber == false)
                {
                  return;
                }
            }
        }
    if (chknm == false)
    {
         input.text = "";
         MessageBox.Show("Only Number Allow !");

    }
}
  • Related