0

我有一个非常烦人的问题,我一直在到处寻找,但对我来说没有任何意义。我最近才开始使用 C#,所以如果这是一个愚蠢的错误,很抱歉。

我已经构建了一个计算器,我可以成功地制作它,但我希望它在用户单击它们时显示操作。例如,当用户单击 6 按钮时,它当然会在文本字段中显示 6,然后当他按下加号(+)按钮时,它应该显示 [6 + ],然后他按下 5,它看起来像这样文本字段 [6 + 5]。

现在这是我的错误。我可以完成上述所有工作,但是当我单击等号(=)按钮时,出现错误。它说

“输入字符串的格式不正确。”

它说错误在这行代码上:

 decimal total = Convert.ToDecimal(LCD.Tag) +
 Convert.ToDecimal(LCD.Text);

这是我的代码:

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

namespace WindowsFormsApplication1
{
    public partial class Window : Form
    {

        bool pluss = false;
        bool minuss = false;
        bool multiplyy = false;
        bool dividee = false;

        public Window()
        {
            InitializeComponent();
        }

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

        private void dec_Click(object sender, EventArgs e)
        {
            if (LCD.Text.Contains("."))
            {
                return;
            }
            else {
                LCD.Text = LCD.Text + ".";
            }
        }

        private void zero_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "0";
        }

        private void one_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "1";
        }

        private void two_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "2";
        }

        private void three_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "3";
        }

        private void four_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "4";
        }

        private void five_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "5";
        }

        private void six_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "6";
        }

        private void seven_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "7";
        }

        private void eight_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "8";
        }

        private void nine_Click(object sender, EventArgs e)
        {
            LCD.Text = LCD.Text + "9";
        }

        private void plus_Click(object sender, EventArgs e)
        {
            if (LCD.Text == "")
            {
                return;
            }else{
                pluss = true;
                LCD.Tag = LCD.Text;
                LCD.Text = LCD.Text + " + ";
            }
        }

        private void equal_Click(object sender, EventArgs e)
        {
            decimal total = Convert.ToDecimal(LCD.Tag) + Convert.ToDecimal(LCD.Text);
            LCD.Text = total.ToString();
        }
    }
}

我正在等待某人的回复,如果我能得到修复,我会非常感激。谢谢。

4

3 回答 3

4

当你的程序崩溃时:

  1. 闯入调试器。
  2. 检查 和 的LCD.TagLCD.Text
  3. 中提琴,你肯定会注意到格式有问题。

我意识到这是一个练习项目,但这种来回操作字符串并不是构建计算器的最佳方式。最好将显示与用于包含表达式树和值的数据结构(即用于进行实际计算的数据结构)分开。

于 2012-07-10T22:33:38.800 回答
0

您正在尝试将包含“+”符号的字符串转换为十进制格式。

在您的应用程序中放置一些断点并检查它崩溃的位置,该值可能不是您期望的那样。

于 2012-07-10T22:34:40.530 回答
0

看看你要Convert.ToDecimal转换的东西(LCD.Text)。它需要一个字符串格式的数字,但您传递的内容类似于“ 1 + 2”,但事实并非如此。您必须自己评估表达式。

于 2012-07-10T22:36:13.697 回答