2

我不明白我在 dotButton 中做错了什么,它显示了它但没有给出正确的结果?有什么建议吗?

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private bool isFirst = true;
        private bool shouldClear = true;
        private double num1;
        private double num2;
        private double result = 0;
        private string symbol = string.Empty;
        private bool hasDecimal = false;

        private void numberButton_Click(object sender, EventArgs e)
        {
            Button sourceButton = (sender as Button);
            double oldNumber, buttonNumber, newNumber;

            if (shouldClear)
            {
                outputTextbox.Clear();
                oldNumber = 0;
                shouldClear = false;
            }
            else
            {
                oldNumber = double.Parse(outputTextbox.Text);
                hasDecimal = true;
            }

            buttonNumber = Double.Parse(sourceButton.Text);
            newNumber = (oldNumber * 10) + buttonNumber;

            if (isFirst)
            {
                num1 = newNumber;
            }
            else
            {
                num2 = newNumber;
            }
            outputTextbox.Text += sourceButton.Text;
            Calculate(symbol);
        }
        private void Calculate(string operatorSymbol)
        {
            if (isFirst)
            {
                result = num1;
                return;
            }
            switch (operatorSymbol)
            {
                case "+":
                    result = num1 + num2;
                    break;
                case "-":
                    result = num1 - num2;
                    break;
                case "*":
                    result = num1 * num2;
                    break;
                case "/":
                    result = num1 / num2;
                    break;
            }
        }
        private void operatorButton_Click(object sender, EventArgs e)
        {
            num1 = result;

            Button sourceButton = (sender as Button);
            string operatorSymbol = sourceButton.Text;

            if (isFirst)
                isFirst = false;

            hasDecimal = true;
            shouldClear = true;
            symbol = operatorSymbol;
            outputTextbox.Text = result.ToString();

        }

        private void equalsButton_Click(object sender, EventArgs e)
        {
            outputTextbox.Text = result.ToString();
            isFirst = true;
            shouldClear = true;
            hasDecimal = true;
        }

        private void clearButton_Click(object sender, EventArgs e)
        {
            outputTextbox.Text = "0";
            result = 0;
            isFirst = true;
            shouldClear = true;
            hasDecimal = false;
        }

        private void dotButton_Click(object sender, EventArgs e)
        {
            if (hasDecimal)
                hasDecimal = true;
            isFirst = false;
            shouldClear = true;
            outputTextbox.Text = dotButton.Text;
            }
        }
    }


namespace WindowsFormsApplication2
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.zeroButton = new System.Windows.Forms.Button();
            this.oneButton = new System.Windows.Forms.Button();
            this.twoButton = new System.Windows.Forms.Button();
            this.threeButton = new System.Windows.Forms.Button();
            this.fourButton = new System.Windows.Forms.Button();
            this.fiveButton = new System.Windows.Forms.Button();
            this.sixButton = new System.Windows.Forms.Button();
            this.sevenButton = new System.Windows.Forms.Button();
            this.eightButton = new System.Windows.Forms.Button();
            this.nineButton = new System.Windows.Forms.Button();
            this.dotButton = new System.Windows.Forms.Button();
            this.addButton = new System.Windows.Forms.Button();
            this.subtractButton = new System.Windows.Forms.Button();
            this.multiplyButton = new System.Windows.Forms.Button();
            this.divideButton = new System.Windows.Forms.Button();
            this.clearButton = new System.Windows.Forms.Button();
            this.equalsButton = new System.Windows.Forms.Button();
            this.outputTextbox = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // zeroButton
            // 
            this.zeroButton.Location = new System.Drawing.Point(9, 230);
            this.zeroButton.Margin = new System.Windows.Forms.Padding(2);
            this.zeroButton.Name = "zeroButton";
            this.zeroButton.Size = new System.Drawing.Size(58, 41);
            this.zeroButton.TabIndex = 0;
            this.zeroButton.Text = "0";
            this.zeroButton.UseVisualStyleBackColor = true;
            this.zeroButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // oneButton
            // 
            this.oneButton.Location = new System.Drawing.Point(9, 184);
            this.oneButton.Margin = new System.Windows.Forms.Padding(2);
            this.oneButton.Name = "oneButton";
            this.oneButton.Size = new System.Drawing.Size(38, 41);
            this.oneButton.TabIndex = 1;
            this.oneButton.Text = "1";
            this.oneButton.UseVisualStyleBackColor = true;
            this.oneButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // twoButton
            // 
            this.twoButton.Location = new System.Drawing.Point(51, 184);
            this.twoButton.Margin = new System.Windows.Forms.Padding(2);
            this.twoButton.Name = "twoButton";
            this.twoButton.Size = new System.Drawing.Size(38, 41);
            this.twoButton.TabIndex = 2;
            this.twoButton.Text = "2";
            this.twoButton.UseVisualStyleBackColor = true;
            this.twoButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // threeButton
            // 
            this.threeButton.Location = new System.Drawing.Point(93, 184);
            this.threeButton.Margin = new System.Windows.Forms.Padding(2);
            this.threeButton.Name = "threeButton";
            this.threeButton.Size = new System.Drawing.Size(38, 41);
            this.threeButton.TabIndex = 3;
            this.threeButton.Text = "3";
            this.threeButton.UseVisualStyleBackColor = true;
            this.threeButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // fourButton
            // 
            this.fourButton.Location = new System.Drawing.Point(9, 139);
            this.fourButton.Margin = new System.Windows.Forms.Padding(2);
            this.fourButton.Name = "fourButton";
            this.fourButton.Size = new System.Drawing.Size(38, 41);
            this.fourButton.TabIndex = 4;
            this.fourButton.Text = "4";
            this.fourButton.UseVisualStyleBackColor = true;
            this.fourButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // fiveButton
            // 
            this.fiveButton.Location = new System.Drawing.Point(51, 139);
            this.fiveButton.Margin = new System.Windows.Forms.Padding(2);
            this.fiveButton.Name = "fiveButton";
            this.fiveButton.Size = new System.Drawing.Size(38, 41);
            this.fiveButton.TabIndex = 5;
            this.fiveButton.Text = "5";
            this.fiveButton.UseVisualStyleBackColor = true;
            this.fiveButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // sixButton
            // 
            this.sixButton.Location = new System.Drawing.Point(93, 139);
            this.sixButton.Margin = new System.Windows.Forms.Padding(2);
            this.sixButton.Name = "sixButton";
            this.sixButton.Size = new System.Drawing.Size(38, 41);
            this.sixButton.TabIndex = 6;
            this.sixButton.Text = "6";
            this.sixButton.UseVisualStyleBackColor = true;
            this.sixButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // sevenButton
            // 
            this.sevenButton.Location = new System.Drawing.Point(9, 93);
            this.sevenButton.Margin = new System.Windows.Forms.Padding(2);
            this.sevenButton.Name = "sevenButton";
            this.sevenButton.Size = new System.Drawing.Size(38, 41);
            this.sevenButton.TabIndex = 7;
            this.sevenButton.Text = "7";
            this.sevenButton.UseVisualStyleBackColor = true;
            this.sevenButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // eightButton
            // 
            this.eightButton.Location = new System.Drawing.Point(51, 93);
            this.eightButton.Margin = new System.Windows.Forms.Padding(2);
            this.eightButton.Name = "eightButton";
            this.eightButton.Size = new System.Drawing.Size(38, 41);
            this.eightButton.TabIndex = 8;
            this.eightButton.Text = "8";
            this.eightButton.UseVisualStyleBackColor = true;
            this.eightButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // nineButton
            // 
            this.nineButton.Location = new System.Drawing.Point(93, 93);
            this.nineButton.Margin = new System.Windows.Forms.Padding(2);
            this.nineButton.Name = "nineButton";
            this.nineButton.Size = new System.Drawing.Size(38, 41);
            this.nineButton.TabIndex = 9;
            this.nineButton.Text = "9";
            this.nineButton.UseVisualStyleBackColor = true;
            this.nineButton.Click += new System.EventHandler(this.numberButton_Click);
            // 
            // dotButton
            // 
            this.dotButton.Location = new System.Drawing.Point(72, 230);
            this.dotButton.Margin = new System.Windows.Forms.Padding(2);
            this.dotButton.Name = "dotButton";
            this.dotButton.Size = new System.Drawing.Size(58, 41);
            this.dotButton.TabIndex = 10;
            this.dotButton.Text = ".";
            this.dotButton.UseVisualStyleBackColor = true;
            this.dotButton.Click += new System.EventHandler(this.dotButton_Click);
            // 
            // addButton
            // 
            this.addButton.Location = new System.Drawing.Point(135, 230);
            this.addButton.Margin = new System.Windows.Forms.Padding(2);
            this.addButton.Name = "addButton";
            this.addButton.Size = new System.Drawing.Size(38, 41);
            this.addButton.TabIndex = 11;
            this.addButton.Text = "+";
            this.addButton.UseVisualStyleBackColor = true;
            this.addButton.Click += new System.EventHandler(this.operatorButton_Click);
            // 
            // subtractButton
            // 
            this.subtractButton.Location = new System.Drawing.Point(135, 184);
            this.subtractButton.Margin = new System.Windows.Forms.Padding(2);
            this.subtractButton.Name = "subtractButton";
            this.subtractButton.Size = new System.Drawing.Size(38, 41);
            this.subtractButton.TabIndex = 12;
            this.subtractButton.Text = "-";
            this.subtractButton.UseVisualStyleBackColor = true;
            this.subtractButton.Click += new System.EventHandler(this.operatorButton_Click);
            // 
            // multiplyButton
            // 
            this.multiplyButton.Location = new System.Drawing.Point(135, 139);
            this.multiplyButton.Margin = new System.Windows.Forms.Padding(2);
            this.multiplyButton.Name = "multiplyButton";
            this.multiplyButton.Size = new System.Drawing.Size(38, 41);
            this.multiplyButton.TabIndex = 13;
            this.multiplyButton.Text = "*";
            this.multiplyButton.UseVisualStyleBackColor = true;
            this.multiplyButton.Click += new System.EventHandler(this.operatorButton_Click);
            // 
            // divideButton
            // 
            this.divideButton.Location = new System.Drawing.Point(135, 93);
            this.divideButton.Margin = new System.Windows.Forms.Padding(2);
            this.divideButton.Name = "divideButton";
            this.divideButton.Size = new System.Drawing.Size(38, 41);
            this.divideButton.TabIndex = 14;
            this.divideButton.Text = "/";
            this.divideButton.UseVisualStyleBackColor = true;
            this.divideButton.Click += new System.EventHandler(this.operatorButton_Click);
            // 
            // clearButton
            // 
            this.clearButton.Location = new System.Drawing.Point(9, 48);
            this.clearButton.Margin = new System.Windows.Forms.Padding(2);
            this.clearButton.Name = "clearButton";
            this.clearButton.Size = new System.Drawing.Size(80, 41);
            this.clearButton.TabIndex = 15;
            this.clearButton.Text = "Clear";
            this.clearButton.UseVisualStyleBackColor = true;
            this.clearButton.Click += new System.EventHandler(this.clearButton_Click);
            // 
            // equalsButton
            // 
            this.equalsButton.Location = new System.Drawing.Point(93, 48);
            this.equalsButton.Margin = new System.Windows.Forms.Padding(2);
            this.equalsButton.Name = "equalsButton";
            this.equalsButton.Size = new System.Drawing.Size(80, 41);
            this.equalsButton.TabIndex = 16;
            this.equalsButton.Text = "=";
            this.equalsButton.UseVisualStyleBackColor = true;
            this.equalsButton.Click += new System.EventHandler(this.equalsButton_Click);
            // 
            // outputTextbox
            // 
            this.outputTextbox.Location = new System.Drawing.Point(9, 3);
            this.outputTextbox.Margin = new System.Windows.Forms.Padding(2);
            this.outputTextbox.Multiline = true;
            this.outputTextbox.Name = "outputTextbox";
            this.outputTextbox.Size = new System.Drawing.Size(164, 41);
            this.outputTextbox.TabIndex = 17;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(184, 280);
            this.Controls.Add(this.outputTextbox);
            this.Controls.Add(this.equalsButton);
            this.Controls.Add(this.clearButton);
            this.Controls.Add(this.divideButton);
            this.Controls.Add(this.multiplyButton);
            this.Controls.Add(this.subtractButton);
            this.Controls.Add(this.addButton);
            this.Controls.Add(this.dotButton);
            this.Controls.Add(this.nineButton);
            this.Controls.Add(this.eightButton);
            this.Controls.Add(this.sevenButton);
            this.Controls.Add(this.sixButton);
            this.Controls.Add(this.fiveButton);
            this.Controls.Add(this.fourButton);
            this.Controls.Add(this.threeButton);
            this.Controls.Add(this.twoButton);
            this.Controls.Add(this.oneButton);
            this.Controls.Add(this.zeroButton);
            this.Margin = new System.Windows.Forms.Padding(2);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button zeroButton;
        private System.Windows.Forms.Button oneButton;
        private System.Windows.Forms.Button twoButton;
        private System.Windows.Forms.Button threeButton;
        private System.Windows.Forms.Button fourButton;
        private System.Windows.Forms.Button fiveButton;
        private System.Windows.Forms.Button sixButton;
        private System.Windows.Forms.Button sevenButton;
        private System.Windows.Forms.Button eightButton;
        private System.Windows.Forms.Button nineButton;
        private System.Windows.Forms.Button dotButton;
        private System.Windows.Forms.Button addButton;
        private System.Windows.Forms.Button subtractButton;
        private System.Windows.Forms.Button multiplyButton;
        private System.Windows.Forms.Button divideButton;
        private System.Windows.Forms.Button clearButton;
        private System.Windows.Forms.Button equalsButton;
        private System.Windows.Forms.TextBox outputTextbox;
    }
}
4

2 回答 2

2

我会怀疑你想要

outputTextbox.Text += dotButton.Text;

(你错过了+

于 2013-09-04T17:48:24.097 回答
1

在您的方法中,dotButton_Click您有一个boolean shouldClear设置为true

private void dotButton_Click(object sender, EventArgs e)
{
    if (hasDecimal)
        hasDecimal = true;
    isFirst = false;
    shouldClear = true;
    outputTextbox.Text += dotButton.Text;
}

将其更改为false.

并且:不只是outputTextbox.Text += dotButton.Text;一个.+==

以下行有问题:

        buttonNumber = Double.Parse(sourceButton.Text);
        newNumber = (oldNumber*10) + buttonNumber;

为什么要乘以 10?

这里似乎有很多逻辑有点混乱,我已经解决了调试代码并逐步执行它所需的第一个问题。你会看到事件的顺序不是你想要的顺序。这里有太多东西要改变,而且需要重写,我相信你会想要自己做而不是让我为你做......即使我有时间。

于 2013-09-04T19:10:52.813 回答