尝试使用C#创建表单计算器,不确定“System.FormatException”错误

时间:2016-09-27 20:23:24

标签: c#

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

        private void Calculate_Click(object sender, EventArgs e)
        {
            int num1 = Convert.ToInt32(Number1.Text);
            int num2 = Convert.ToInt32(Number2.Text);
            int result = 0;
            string resultString = Convert.ToString(result);

            if (Addition.Checked == true)
            {
                result = num1 + num2;
                resultBox.Text = resultString;
            }
           else if (Subtraction.Checked == true)
            {
                result = num1 - num2;
                resultBox.Text = resultString;
            }
            else if (Multiplication.Checked == true)
            {
                result = num1 * num2;
                resultBox.Text = resultString;
            }
            else
            {
                resultBox.Text = "Error, no parameter selected";
            }
        }
    }
}

我很确定大部分是正确的,似乎正在转变让我绊倒。我是C#的新手(第一天!)所以我有点困惑。也是本网站上的第一篇文章,对于任何格式问题都很抱歉。

4 个答案:

答案 0 :(得分:2)

尝试转换为数字听起来像是一个问题。不要使用.cpp,而是尝试使用Convert.ToInt32()

TryParse()

您的代码中的另一个问题是您在解析结果之前转换int num1; int num2; bool isNum1Valid = int.TryParse(Number1.Text, out num1); bool isNum2Valid = int.TryParse(Number2.Text, out num2); if (!isNum1Valid) { // num1 is invalid. Throw an error message or something } if (!isNum2Valid) { // num2 is invalid. Throw an error message or something } 。在进行计算后使用此行:

ResultString

答案 1 :(得分:1)

Icemanind的解决方案非常好,但您可以考虑不允许用户从头开始输入错误的数字(类似于数字文本框)。显示了几个解决方案here

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

此外,您应该考虑溢出(*可能很容易通过Int32.MaxValue获取足够大的数字),因为它可能会导致意外结果,如here所示:

try
{
    checked
    {
        // may be used for all operations

        int product = num1 * num2;
    }
}
catch(OverflowException ex)
{
    resultBox.Text = "Integer operation overflow";
}

OR

将产品声明为Int64,以确保其适应所有可能的结果。

因此,您几乎可以确定文本框中包含有效数字。

答案 2 :(得分:0)

在尝试转换之前,请务必检查空值或空值。

if(String.IsNullOrEmptry(Number2.Text))
  num2 = 0;
else
  num2 = Convert.ToInt32(Number2.Text);

您还在转换'结果'到' resultString'在您设置“结果”的答案之前。'你应该移动

resultBox.Text = resultString;

在if-else块下方。

答案 3 :(得分:0)

您应该在计算后放置string resultString = Convert.ToString(result);

private void Calculate_Click(object sender, EventArgs e)
        {

            int num1 = Number1.Text==""?0:Convert.ToInt32(Number1.Text);
            int num2 = Number2.Text==""?0:Convert.ToInt32(Number2.Text);
            int result = 0;


            if (Addition.Checked == true)
            {
                result = num1 + num2;
            }
           else if (Subtraction.Checked == true)
            {
                result = num1 - num2;
            }
            else if (Multiplication.Checked == true)
            {
                result = num1 * num2;
            }
            else
            {
                resultBox.Text = "Error, no parameter selected";
            }
        string resultString = Convert.ToString(result);
            resultBox.Text = resultString;
        }