0

私は非常に厄介な問題を抱えており、どこでも見つけようと探していましたが、どれも意味がありません。私は最近 C# を始めたばかりなので、ばかげた間違いでしたら申し訳ありません。

私は計算機を作成しましたが、正常に作成できましたが、ユーザーがクリックしたときに操作を表示したいと考えています。たとえば、ユーザーが6ボタンをクリックすると、もちろんテキストフィールドに6が表示されプラス(+)ボタンを押すと[6 +]が表示され、たとえば5を押すと、テキストフィールド [6 + 5]。

ここに私のエラーがあります。上記のすべてを機能させることができますが、equals(=) ボタンをクリックするとエラーが発生します。それは言う

「入力文字列の形式が正しくありませんでした。」

エラーは次のコード行にあると言われています。

 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.Tagとの値を検査しますLCD.Text
  3. ヴィオラ、フォーマットのどこかがおかしいことにきっと気付くはずだ。

これは練習プロジェクトであることは承知していますが、この種の文字列操作は電卓を作成する最良の方法ではありません。式ツリーと値を格納するために使用されるデータ構造 (つまり、実際の計算を行うために使用されるデータ構造) から表示を分離することをお勧めします。

于 2012-07-10T22:33:38.800 に答える
0

「+」記号を含む文字列を 10 進形式に変換しようとしています。

アプリケーションにいくつかのブレークポイントを配置し、どこでクラッシュするかを調べます。値はおそらく期待したものとは異なるでしょう。

于 2012-07-10T22:34:40.530 に答える
0

あなたがConvert.ToDecimal変換するために何を与えているかを見てください(LCD.Text)。文字列形式の数値が必要ですが、「1 + 2」のようなものを渡していますが、そうではありません。式を自分で評価する必要があります。

于 2012-07-10T22:36:13.697 に答える