2

我是 c# 新手,我已经阅读了一些基本概念,现在想学习实际编程,这就是我从简单的计算器程序开始的原因

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Calculator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        double num1 = 0;
        double num2 = 0;


        private void one_Click(object sender, EventArgs e)
        {
            textBox1.Text =textBox1.Text+one.Text;
        }

        private void clear_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
           // textBox1.Text = " ";
        }

        private void two_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text+two.Text;
        }

        private void three_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text+three.Text;
        }

        private void four_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text+four.Text;
        }

        private void five_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + five.Text;
        }

        private void six_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + six.Text;
        }

        private void seven_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + seven.Text;
        }

        private void eight_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + eight.Text;
        }

        private void nine_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + nine.Text;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void add_Click(object sender, EventArgs e)
        {
            num1 = num1 + double.Parse(textBox1.Text) ;
            textBox1.Clear();

        }

        private void ten_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + ten.Text;
        }

        private void equal_Click(object sender, EventArgs e)
        {
            num2 = num1 + double.Parse(textBox1.Text) ;
            textBox1.Text = num2.ToString();
            num1 = 0;

        }


    }
}

该代码在书中给出,他们说它的工作。实际问题是它只工作有时,有时它会给出错误,因为“输入字符串的格式不正确”解决方案是什么。我的第二个问题是——这是学习任何编程语言的正确方法吗?还是我应该继续阅读更多的东西 n 程序?如果有人可以帮助我提供包含示例程序的网站,那将非常有帮助。

4

6 回答 6

1

你的问题是解析双精度。Parse 函数无法解析不代表双精度的字符串。

考虑字符串"135.42",这可以很容易地解析为双精度值135.42。但是如果字符串是"Abc#%%@". 这并不代表双值,这就是您获得异常的地方。

如果这是您的第一门编程语言,那么作为新程序员,您应该阅读 C# 入门书籍。

于 2013-06-26T11:35:28.900 回答
1

如果double.Parse无法将字符串解析为双精度字符串,则会引发异常。但是,使用double.TryParse通常会更好,因为它只会返回 false 而不是抛出异常。

double tmp;
if(double.TryParse(textBox1.Text, out tmp))
{   
   num2 = num1 + tmp;
   textBox1.Text = num2.ToString();
   num1 = 0;
}
else
{
    //double could not be parsed from textbox
}
于 2013-06-26T11:37:21.393 回答
1

您需要限制用户在您的textbox. 您可以通过使用keydown事件来做到这一点textbox。您将在其中检查输入的字符是否为数字,然后将其保留在文本框中。这是您的问题的解决方案。看看这个:

如何制作一个只接受数字的文本框?

对于学习 C#,我更喜欢:

C# 5.0 简而言之:权威参考

于 2013-06-26T11:38:02.247 回答
0

神奇之处在于:double.Parse(textBox1.Text) 此函数仅接受字符串中的数字(逗号或点取决于您的文化)。如果您传递任何其他内容,您将收到给定的异常。在解析之前验证输入或使用 TryParse

double valueinDouble;
var success = double.TryParse(textBox1.Text), out valueinDouble)
if (success)
{
    // do the calculation here
}

TryParse 有另一个实现,您可以在其中指定文化。

 var success = double.TryParse(textBox1.Text), NumberStyles.Any, new CultureInfo("en-US"), out valueinDouble)
于 2013-06-26T11:34:26.740 回答
0

在您这样做之前,double.Parse()您应该验证用户输入,即它是一个实际数字。

我建议改用TryParse方法,例如:

double num;

bool isNum = double.TryParse(Str, out num);

if (isNum)
{
//Calculate here
}
于 2013-06-26T11:36:48.453 回答
0

如果您想更优雅地处理无效参数,您可以使用Double.TryParse代替。

于 2013-06-26T11:37:48.167 回答