我该如何修复这个简单的Windows窗体应用程序

时间:2014-10-29 11:58:13

标签: c# string io textbox windows-forms-designer

我在C#中很新,我试图做一个Windows窗体应用程序而且我遇到了问题。所以基本上是我的程序所做的,它从.txt文件中读取一个数字,并将其与用户在textBox中给出的数字相乘。然后当用户按下按钮时,它会在另一个textBox中告诉答案。所以我的问题是,当它试图读取.txt文件并将其传递给double并乘以它时出现问题,程序崩溃了。我已将按钮的代码包含在'

下面
private void button1_Click(object sender, EventArgs e)
{
    double answer;
    double num;
    double Filename = double.Parse(File.ReadAllText(@"C:/temp/hinnat.txt"));
    num = double.Parse(textBox1.Text);
    answer = Filename * num;
    textBox2.Text = answer.ToString();
}

2 个答案:

答案 0 :(得分:0)

如果文字无效,请使用TryParse

private void button1_Click(object sender, EventArgs e)
{
    double answer;
    double num;
    double Filename 
    if (double.TryParse(File.ReadAllText(@"C:/temp/hinnat.txt"), out Filename)
       && double.TryParse(textBox1.Text, out num))
    {
        answer = Filename * num;
        textBox2.Text = answer.ToString();
    }
}

答案 1 :(得分:0)

Double.Parse Double.TryParse 方法取决于文化,即在某些文化中,小数点分隔符为点('。')比如 10.5 ,而在其他文化中,小数点分隔符是逗号(','),如 10,5 。这就是为什么如果您不确定文本文件中可能包含哪些输入,或者您的应用程序的当前文化是什么,最好使用自定义 TryParse 方法替换任何带点的逗号,并使用不变文化将字符串解析为双倍:

private static bool TryParse(string str, out double result)
{
    // Invariant culture uses dot ('.') as decimal separator, so replace any comma with dot
    if (str.IndexOf(',') != -1)
    {
        str = str.Replace(',', '.');
    }

    // Try parsing with the Invariant culture
    return Double.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out result);
}

然后你可以这样称呼它:

string fileContent = File.ReadAllText(@"C:/temp/hinnat.txt");
double fileDouble;
if (TryParse(fileContent, out fileDouble))
{
    // Parsing was successfull
    // Your code here
}