C# Win 计算器 麻烦看看问题出在哪里?

u010687495 2013-05-14 10:49:15
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 WindowsFormsApplication5
{
public partial class Form1 : Form
{
double num1, num2, result;
bool decimalFlag=false;
string myOperator;

public Form1()
{
InitializeComponent();
}

private void textReadout_TextChanged(object sender, EventArgs e)
{
textReadout.Text = "0.";
textReadout.TextAlign = HorizontalAlignment.Right;
}



public void NumClick(int myNumber)
{
if (decimalFlag)
{
textReadout.Text = textReadout.Text + myNumber;
}
else
{
if (textReadout.Text == "0.")
{
textReadout.Text = myNumber + ".";

}
else
{
textReadout.Text = textReadout.Text.Substring
(0, textReadout.Text.Length + 1) + myNumber + ".";
}
}
}



private void button10_Click(object sender, EventArgs e)
{
NumClick(0);
}

private void button3_Click(object sender, EventArgs e)
{
NumClick(1);
}

private void button8_Click(object sender, EventArgs e)
{
NumClick(2);
}

private void button9_Click(object sender, EventArgs e)
{
NumClick(3);
}

private void button2_Click(object sender, EventArgs e)
{
NumClick(4);
}

private void button6_Click(object sender, EventArgs e)
{
NumClick(5);
}

private void button7_Click(object sender, EventArgs e)
{
NumClick(6);
}

private void button1_Click(object sender, EventArgs e)
{
NumClick(7);
}

private void button4_Click(object sender, EventArgs e)
{
NumClick(8);
}

private void button5_Click(object sender, EventArgs e)
{
NumClick(9);
}





private void button11_Click(object sender, EventArgs e)
{
decimalFlag = true;
}

private void but_C_Click(object sender, EventArgs e)
{
num1 = 0;
num2 = 0;
textReadout.Text="0.";
decimalFlag=false;
}

private void buttonAdd_Click(object sender, EventArgs e)
{
myOperator = "add";
num1 = double.Parse(textReadout.Text);
textReadout.Text = "0.";
decimalFlag = false;
}

private void buttonSub_Click(object sender, EventArgs e)
{
myOperator = "Sub";
num1 = double.Parse(textReadout.Text);
textReadout.Text = "0.";
decimalFlag = false;
}

private void buttonMul_Click(object sender, EventArgs e)
{
myOperator = "Mul";
num1 = double.Parse(textReadout.Text);
textReadout.Text = "0.";
decimalFlag = false;
}

private void buttonDiv_Click(object sender, EventArgs e)
{
myOperator = "Div";
num1 = double.Parse(textReadout.Text);
textReadout.Text = "0.";
decimalFlag = false;
}

private void button12_Click(object sender, EventArgs e)
{
num2 = double.Parse(textReadout.Text);
switch (myOperator)
{
case"add":
result = num1 + num2;
textReadout.Text = result.ToString();
break;
case "Sub":
result = num1 - num2;
textReadout.Text = result.ToString();
break;
case "Mul":
result = num1 * num2;
textReadout.Text = result.ToString();
break;
case "Div":
if (num2 == 0)
{
textReadout.Text = "除数不能为“0”!";
}
else
{
result = num1 / num2;
textReadout.Text = result.ToString();
}
break;
}
}

}
}
...全文
206 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxx2011 2013-05-15
  • 打赏
  • 举报
回复
引用 13 楼 u010687495 的回复:
[quote=引用 11 楼 luxianxin 的回复:] private void textReadout_TextChanged(object sender, EventArgs e) { //textReadout.Text = "0."; textReadout.TextAlign = HorizontalAlignment.Right; } 当textReadout控件的text值发生改变时引发的事件,所以必须注释那一行,否则textReadout.Text永远显示“0.” textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length - 1) + myNumber + ".";中Substring(0, textReadout.Text.Length + 1)方法是获取字符串中比字符串长度少一个字符的字符串,例如“12.”则得到“12”;
谢谢你,问题基本解决了,可是我想让text起始显示“0.”,怎么办呢?[/quote] 直接将textReadout控件的Text属性改为“0.”就行了。。。
u010687495 2013-05-15
  • 打赏
  • 举报
回复
引用 11 楼 luxianxin 的回复:
private void textReadout_TextChanged(object sender, EventArgs e) { //textReadout.Text = "0."; textReadout.TextAlign = HorizontalAlignment.Right; } 当textReadout控件的text值发生改变时引发的事件,所以必须注释那一行,否则textReadout.Text永远显示“0.” textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length - 1) + myNumber + ".";中Substring(0, textReadout.Text.Length + 1)方法是获取字符串中比字符串长度少一个字符的字符串,例如“12.”则得到“12”;
现在问题是,每次调试时,都要先按C键,然后输入数字,否则就会报错。
u010687495 2013-05-15
  • 打赏
  • 举报
回复
引用 11 楼 luxianxin 的回复:
private void textReadout_TextChanged(object sender, EventArgs e) { //textReadout.Text = "0."; textReadout.TextAlign = HorizontalAlignment.Right; } 当textReadout控件的text值发生改变时引发的事件,所以必须注释那一行,否则textReadout.Text永远显示“0.” textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length - 1) + myNumber + ".";中Substring(0, textReadout.Text.Length + 1)方法是获取字符串中比字符串长度少一个字符的字符串,例如“12.”则得到“12”;
谢谢你,问题基本解决了,可是我想让text起始显示“0.”,怎么办呢?
u010687495 2013-05-14
  • 打赏
  • 举报
回复
public void NumClick(int myNumber) { if (decimalFlag) { textReadout.Text = textReadout.Text + myNumber; } else { if (textReadout.Text == "0.") { textReadout.Text = myNumber + "."; } else { textReadout.Text = textReadout.Text.Substring (0, textReadout.Text.Length + 1) + myNumber + "."; } } } 我copy的 不太能看懂 辛苦了 我初学
tudiy 2013-05-14
  • 打赏
  • 举报
回复
1.这个方法NumClick(int i)怎么写的? 2.http://wenku.baidu.com/view/a40234db50e2524de5187e1b.html 3.FormLoad事件设置text.text=0
u010687495 2013-05-14
  • 打赏
  • 举报
回复
可运行 点数字键 会报错 另外 不理解 对小数点的解释 text初始界面 为空,如何让他为“0.”
tudiy 2013-05-14
  • 打赏
  • 举报
回复
哪里出了问题?
小生我怕怕 2013-05-14
  • 打赏
  • 举报
回复
private void textReadout_TextChanged(object sender, EventArgs e) { //textReadout.Text = "0."; textReadout.TextAlign = HorizontalAlignment.Right; } 当textReadout控件的text值发生改变时引发的事件,所以必须注释那一行,否则textReadout.Text永远显示“0.” textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length - 1) + myNumber + ".";中Substring(0, textReadout.Text.Length + 1)方法是获取字符串中比字符串长度少一个字符的字符串,例如“12.”则得到“12”;
lxx2011 2013-05-14
  • 打赏
  • 举报
回复
private void textReadout_TextChanged(object sender, EventArgs e) { //textReadout.Text = "0."; textReadout.TextAlign = HorizontalAlignment.Right; } 当textReadout控件的text值发生改变时引发的事件,所以必须注释那一行,否则textReadout.Text永远显示“0.” textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length - 1) + myNumber + ".";中Substring(0, textReadout.Text.Length + 1)方法是获取字符串中比字符串长度少一个字符的字符串,例如“12.”则得到“12”;
caodongjie 2013-05-14
  • 打赏
  • 举报
回复
代码太长了 ,要下班了,帮你顶一下
E次奥 2013-05-14
  • 打赏
  • 举报
回复
计算器应该支持先输入算式在一次性计算。 例如:1*(2+3)-2*2+5;像这样的。。。
u010687495 2013-05-14
  • 打赏
  • 举报
回复
引用 6 楼 shengguang1587 的回复:
= =代码好多~

 //把0-9的数字按钮绑到一个方法上面~
         private void buttonNum_Click(object sender, EventArgs e)
         {
             var num = int.Parse((sender as Button).Text);
             NumClick(num);
         }
把计算方法单独的封装一个出来 给予参与指定运算~
我基本明白您的意思,可是我现在是现有代码不能运行,我觉得能运行了,才谈得上改进。
u010687495 2013-05-14
  • 打赏
  • 举报
回复
引用 5 楼 luxianxin 的回复:
private void textReadout_TextChanged(object sender, EventArgs e) { //textReadout.Text = "0."; textReadout.TextAlign = HorizontalAlignment.Right; } public void NumClick(int myNumber) { if (decimalFlag) { textReadout.Text = textReadout.Text + myNumber; } else { if (textReadout.Text == "0.") { textReadout.Text = myNumber + "."; } else { //textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length + 1) + myNumber + "."; textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length - 1) + myNumber + "."; } } }
您删了一段代码,加了两端注释。没看明白,何意?
圣光麦造 2013-05-14
  • 打赏
  • 举报
回复
= =代码好多~

 //把0-9的数字按钮绑到一个方法上面~
         private void buttonNum_Click(object sender, EventArgs e)
         {
             var num = int.Parse((sender as Button).Text);
             NumClick(num);
         }
把计算方法单独的封装一个出来 给予参与指定运算~
lxx2011 2013-05-14
  • 打赏
  • 举报
回复
private void textReadout_TextChanged(object sender, EventArgs e)
{
//textReadout.Text = "0.";
textReadout.TextAlign = HorizontalAlignment.Right;
}

public void NumClick(int myNumber)
{
if (decimalFlag)
{
textReadout.Text = textReadout.Text + myNumber;
}
else
{
if (textReadout.Text == "0.")
{
textReadout.Text = myNumber + ".";

}
else
{
//textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length + 1) + myNumber + ".";
textReadout.Text = textReadout.Text.Substring(0, textReadout.Text.Length - 1) + myNumber + ".";
}
}
}

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧