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