当前位置:编程学习 > C#/ASP.NET >>

关于用C#做的一个计算器小程序的若干问题

下面的代码是我写的一个关于计算器的代码:
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 WindowsFormsApplication2
{
    public partial class Form1 : Form
    {

        private double n1;
        private double n2;

        private char cal;

        public Form1()
        {
            InitializeComponent();
        }

        private void button10_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "0";
        }

        private void buttonDIAN_Click(object sender, EventArgs e)
        {
            if(textBox1.Text.IndexOf(".")==-1)
            {
                this.textBox1.Text += ".";
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "1";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "2";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "3";
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "4";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "5";
        }

        private void button6_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "6";
        }

        private void button7_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "7";
        }

        private void button8_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "8";
        }

        private void button9_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "9";
        }

        private void buttonJIA_Click(object sender, EventArgs e)
        {
            n1 = double.Parse(textBox1.Text);
            cal = '+';
            textBox1.Text = "";
        }

        private void buttonJIAN_Click(object sender, EventArgs e)
        {
            n1 = double.Parse(textBox1.Text);
            cal = '-';
            textBox1.Text = "";
        }

        private void buttonCHENG_Click(object sender, EventArgs e)
        {
            n1 = double.Parse(textBox1.Text);
            cal = '*';
            textBox1.Text = "";
        }

        private void buttonCHU_Click(object sender, EventArgs e)
        {
            n1 = double.Parse(textBox1.Text);
            cal = '/';
            textBox1.Text = "";
        }

        private void buttonC_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = "";
        }

        private void buttonDENG_Click(object sender, EventArgs e)
        {
            n2 = double.Parse(textBox1.Text);
            switch(cal)
            {
                case '+': this.textBox1.Text =(n1+n2).ToString();
                    break ;
                case '-': this.textBox1.Text =(n1-n2).ToString();
                    break;
                case '*': this.textBox1.Text =(n1*n2).ToString();
                    break;
                case '/': this.textBox1.Text = (n1/n2).ToString();
                    break;
                default: this.textBox1.Text = this.textBox1.Text;
                    break;
            }

        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {

        }
    }
}

有几个问题,求教一下:

1.在数字开头,怎么限制它不能连续输入多个零?

2.如果分别输入“9”,“+”,“=”,这三个按钮,怎么让它运算为“9+9=18”。也就是说上面的,当n2不存在的时候,怎么让n1的值赋予n2?

3.怎么实现“1+2+3+4+5=15”,不是“1+2=3,3+3=6,6+4=10,10+5=15”,就是能让计算器进行连续运算?

上面几个问题,希望好心人可以回答小弟哦!!!

刚学C#的新手,什么都不懂,望赐教!!!

最好是改了代码给我看看!!讲原理我可以理解的有点困难! --------------------编程问答-------------------- http://www.google.com.hk/#hl=zh-CN&source=hp&q=site:download.csdn.net+%E8%AE%A1%E7%AE%97%E5%99%A8+csharp&oq=site:download.csdn.net+%E8%AE%A1%E7%AE%97%E5%99%A8+csharp&aq=f&aqi=&aql=&gs_sm=e&gs_upl=657l12750l0l13219l34l34l0l25l25l0l235l1484l1.5.3l9l0&fp=7c9566161d614731&biw=792&bih=466 --------------------编程问答-------------------- 参考
效果图
--------------------编程问答-------------------- 每个事件里做判断就可以了嘛。 --------------------编程问答-------------------- 利用keyPress事件,对输入做判断

if(e.key……)
  {
   ……
   }
--------------------编程问答-------------------- 加油加油 --------------------编程问答-------------------- 加判断条件 --------------------编程问答-------------------- 没有什么好办法,就是各种判断逻辑。但写代码要考虑封装,想你那0-9的事件可以写成一个。 --------------------编程问答-------------------- 计算表达式:下面是动态编译的方法,另外网上有很多其他方式计算表达式的代码和例子,你可以百度。


/// <summary>
/// 采用动态编译,计算表达式的结果(你可以传入标准表达式,或者自己处理后传入自定义的表达式了)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button6_Click(object sender, EventArgs e)
{
    // 声明要计算C#代码,要求必须完整的C#代码
    string strCode = @"
                    using System;
                    namespace ParseEx
                    {
                        public class ParseExC
                        {
                            public static double GetValue()
                            {
                                return 1+5*8-(Math.Sin(12)*2.5);
                            }
                        }
                    }";

    CodeDomProvider comp  = new CSharpCodeProvider();
    CompilerParameters cp = new CompilerParameters();            

    StringBuilder codeBuilder = new StringBuilder();            
    codeBuilder.AppendLine(strCode);

    cp.ReferencedAssemblies.Add("System.dll");
    cp.GenerateExecutable = false;
    cp.GenerateInMemory   = true;
    
    CompilerResults cr = comp.CompileAssemblyFromSource(cp, codeBuilder.ToString());
    if (cr.Errors.HasErrors)
    {
        MessageBox.Show("Error!");
    }
    else
    {
        Assembly a = cr.CompiledAssembly;
        if (a != null)
        {
            Type t = a.GetType("ParseEx.ParseExC");
            if (t != null)
            {
                // 因为是静态调用,不需要创建实例了
                // object mode = a.CreateInstance("Mode");
                MethodInfo mi = t.GetMethod("GetValue", BindingFlags.Static | BindingFlags.Public);
                if (mi != null)
                {
                    double d = (double)mi.Invoke(null, null);
                    MessageBox.Show(d.ToString());
                }
            }
        }
    }
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,