textbox validation for allow one “ . ” value c#

后端 未结 8 1611
悲&欢浪女
悲&欢浪女 2021-01-23 08:56

I want textbox validation for allowing only one . value and only numbers. Means my textbox value should take only numerics and one . value. Value shoul

相关标签:
8条回答
  • 2021-01-23 09:55

    Add a Control.KeyPress event handler for your textbox.

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar))  //bypass control keys
        {
            int dotIndex = textBox1.Text.IndexOf('.');
            if (char.IsDigit(e.KeyChar))     //ensure it's a digit
            {   //we cannot accept another digit if
                if (dotIndex != -1 &&  //there is already a dot and
                    //dot is to the left from the cursor position and
                    dotIndex < textBox1.SelectionStart &&
                    //there're already 2 symbols to the right from the dot
                    textBox1.Text.Substring(dotIndex + 1).Length >= 2)
                {
                    e.Handled = true;
                }
            }
            else //we cannot accept this char if
                e.Handled = e.KeyChar != '.' || //it's not a dot or
                            //there is already a dot in the text or
                            dotIndex != -1 ||   
                            //text is empty or
                            textBox1.Text.Length == 0 || 
                            //there are more than 2 symbols from cursor position
                            //to the end of the text
                            textBox1.SelectionStart + 2 < textBox1.Text.Length;
        }
    }
    

    You may do it through designer or in your constructor like this:

    public Form1()
    {
        InitializeComponent();
        //..other initialization
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    

    I have also added several checks to ensure, that you could insert digits not only in the end of the text, but in any position. Same with a dot. It controls that you have not more than 2 digits to the right from the dot. I've used TextBox.SelectionStart Property to get the position of the cursor in the textbox. Check this thread for more info about that: How do I find the position of a cursor in a text box?

    0 讨论(0)
  • 2021-01-23 09:58

    Simplly in keyPress event of your textBox you could do this ...

            e.Handled = !char.IsDigit(e.KeyChar)&&(e.KeyChar != '.') && !char.IsControl(e.KeyChar);
            if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
            {
                e.Handled = true;
            }
    
    0 讨论(0)
提交回复
热议问题