当我尝试 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 时如何导致它停止的主要内容,如果未能解决你的问题,请参考以下文章

停止 AsyncTask 会导致服务结束

替换多行文本时如何在第一次出现时停止[重复]

XNA 声音开始或停止播放时的小噪音

Xcode:如何让它停止打开额外的窗口?

如何正确暂停/停止线程?

在Android中,当我播放音频并转到其他活动时,音频回来后不会停止