当我尝试 d 时如何导致它停止
Posted
技术标签:
【中文标题】当我尝试 d 时如何导致它停止【英文标题】:How to aill cause it to ces when I try to d 【发布时间】:2015-03-21 12:46:45 【问题描述】:当我尝试从小数点开始进行十进制计算时,我的程序崩溃了。例如,“.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));
【问题讨论】:
能否请您发布计算结果?谢谢 我们如何才能帮助您了解您提供给我们的少量信息? 对不起,我想也许有一个我根本不知道的固定答案,我认为我的代码不会有用。感谢您这么快回复 “我的程序崩溃”是什么意思?这可能意味着如此很多事情。 它停止并突出显示这行代码:Diameter1 = double.Parse(textBox1.Text) 再次道歉!新手。 【参考方案1】:当您在输入时更新值,当您输入句点并且文本框仅包含"."
时它将失败。当你解析它时,它会导致异常。
使用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-";
【讨论】:
@BobWood:解析".9"
这样的字符串没有问题,小数点前的数字不是必须的。这是之前的步骤,当您只输入 "."
时它会崩溃。【参考方案2】:
您的问题是您将非数字文本传递给需要数值的函数:
Diameter1 = double.Parse(textBox1.Text);
例如,如果您将文本框的值更改为“hello”,就会发生这种情况。您需要做的是放入另一个条件语句,以确保您的代码只接受“数字”文本。
请耐心等待,我正在研究一个示例...
【讨论】:
以上是关于当我尝试 d 时如何导致它停止的主要内容,如果未能解决你的问题,请参考以下文章