输入字符串的格式不正确发生在 c# 中

Input string was not in a correct format occurs in c#

    private void txtbox_BattMmnt_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back /*|| e.KeyChar == (char)5*/ || e.KeyChar == 46)
        {
            e.Handled = false;
        }           
        else
        {
            e.Handled = true;
            MessageBox.Show("Please Enter Only Numeric Value", "Error", MessageBoxButtons.OK);
        }
        double i=Convert.ToDouble(txtbox_BattMmnt.Text);
        if (i >=2.9 || i <= 3.35)
        { e.Handled = false; }
        else
        {
            e.Handled = true;
            MessageBox.Show("Please Enter Only from 2.9 to 3.35", "Error", MessageBoxButtons.OK);
        }
    }

错误出现在double i=Convert.ToDouble(txtbox_BattMmnt.Text); 我该怎么办?我尝试了 Regex,但它无法满足我在文本框中输入的值范围。

试试这个:

double d;
if(!double.TryParse(txtbox_BattMmnt.Text, out d))
{
    // invalid text in textbox, not convertable to double
}

这允许任意用户输入而不会使您的应用程序崩溃。

试试这个

private void txtbox_BattMmnt_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back /*|| e.KeyChar == (char)5*/ || e.KeyChar == 46)
    {
        e.Handled = false;
    }
    else
    {
        e.Handled = true;
        MessageBox.Show("Please Enter Only Numeric Value", "Error", MessageBoxButtons.OK);
        return;//return if it is not numeric.
    }
    double i = 0;
    Double.TryParse(txtbox_BattMmnt.Text, out i);
    if (i <= 2.9 || i >= 3.35)
    { e.Handled = false; }
    else
    {
        e.Handled = true;
        MessageBox.Show("Please Enter Only from 2.9 to 3.35", "Error", MessageBoxButtons.OK);
    }
}
  private void txtbox_BattMmnt_Validating(object sender, CancelEventArgs e)
    {
        TextBox txtbox_BattMmnt = (TextBox)sender;
        double d; Double.TryParse(txtbox_BattMmnt.Text, out d);
        if ((d <= 2.8) || (d >= 3.36))
        {
            MessageBox.Show("Please Enter Only from 2.9 to 3.35", "Error", MessageBoxButtons.OK);
        }

        txtbox_BattMmnt.Text = String.Empty;

    }

我试过了……成功了。谢谢大家