当我尝试d时,如何使它成为ces

时间:2015-03-21 12:46:46

标签: c#

当我尝试从小数点开始进行小数计算时,我的程序崩溃了。例如," .9"会导致它崩溃,而" 0.9"工作正常。

以下是代码:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) 
            && !char.IsDigit(e.KeyChar) 
            && (e.KeyChar != '.'))
        {
            e.Handled = true;
        }

        if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
        {
            e.Handled = true;
        }
        if (e.KeyChar == Convert.ToChar(Keys.Return))
        {
            textBox2.Text = Area1.ToString();
        }
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text == String.Empty)
        {
            textBox2.Text = " ";
        }
        else
            Diameter1 = double.Parse(textBox1.Text);
        Area1 = (Math.PI * Math.Pow((Diameter1 / 2), 2));
    }

2 个答案:

答案 0 :(得分:0)

在键入时更新值时,如果键入句点并且文本框仅包含".",则会失败。解析时,会导致异常。

使用TryParse尝试解析值,并在解析失败时执行其他操作。例如:

private void textBox1_TextChanged(object sender, EventArgs e)
{
  if (textBox1.Text == String.Empty) {
    textBox2.Text = " ";
  } else {
    if (double.TryParse(textBox1.Text, out Diameter1)) {
      Area1 = Math.PI * Math.Pow((Diameter1 / 2), 2);
      textBox2.Text = Area1.ToString();
    } else {
      textBox2.Text = "-not numeric-";
    }
  }
}

答案 1 :(得分:0)

您的问题是您将非数字文本传递给需要数值的函数:

Diameter1 = double.Parse(textBox1.Text);

例如,如果您将文本框值更改为“hello”,则可能会发生这种情况。您需要做的是放入另一个条件语句,以确保您的代码只接受“数字”文本。

忍受我,我正在研究一个例子......