这里的第二篇文章,所以我最近开始了我的计算课程,我们正在研究C#我已经理解了所有的东西,我们有我们应该继续工作的第一个项目,但是我被困在这里,我将展示你需要阅读整个代码,然后我会在底部找到发现错误的部分:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Calculator
{
public partial class Form1 : Form
{
string number;
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Number0_Click(object sender, EventArgs e)
{
number = number + "0";
CalcForm.Text = number;
}
private void Number1_Click(object sender, EventArgs e)
{
number = number + "1";
CalcForm.Text = number;
}
private void Number2_Click(object sender, EventArgs e)
{
number = number + "2";
CalcForm.Text = number;
}
private void Number3_Click(object sender, EventArgs e)
{
number = number + "3";
CalcForm.Text = number;
}
private void Number4_Click(object sender, EventArgs e)
{
number = number + "4";
CalcForm.Text = number;
}
private void Number5_Click(object sender, EventArgs e)
{
number = number + "5";
CalcForm.Text = number;
}
private void Number6_Click(object sender, EventArgs e)
{
number = number + "6";
CalcForm.Text = number;
}
private void Number7_Click(object sender, EventArgs e)
{
number = number + "7";
CalcForm.Text = number;
}
private void Number8_Click(object sender, EventArgs e)
{
number = number + "8";
CalcForm.Text = number;
}
private void Number9_Click(object sender, EventArgs e)
{
number = number + "9";
CalcForm.Text = number;
}
private void ButtonDecimal_Click(object sender, EventArgs e)
{
number = number + ".";
CalcForm.Text = number;
}
private void ButtonTimes_Click(object sender, EventArgs e)
{
string equation1 = CalcForm.Text;
double equation1int = Convert.ToDouble(equation1);
CalcForm.Text = "";
number = "";
string equation2 = CalcForm.Text;
double equation2int = Convert.ToDouble(equation2);
var equalsclicked = ButtonEquals_Click;
if (equalsclicked == true)
{
CalcForm.Text = "";
number = "";
double answer = equation1int * equation2int;
string answer1 = Convert.ToString(answer);
CalcForm.Text = answer1;
}
}
private void ButtonEquals_Click(object sender, EventArgs e)
{
}
}
}
所以,有表单代码,这是错误,我会在确切的行上发表评论
{
string equation1 = CalcForm.Text;
double equation1int = Convert.ToDouble(equation1);
CalcForm.Text = "";
number = "";
string equation2 = CalcForm.Text;
double equation2int = Convert.ToDouble(equation2);
var equalsclicked = ButtonEquals_Click; //Here
if (equalsclicked == true) //Here
{
CalcForm.Text = "";
number = "";
double answer = equation1int * equation2int;
string answer1 = Convert.ToString(answer);
CalcForm.Text = answer1;
}
有错误,还有什么其他你可以看错的吗?还是优化明智?这只是为了乘法,但是一旦我这样做,我就可以很容易地复制它,谢谢:)
答案 0 :(得分:1)
错误与编译器完全一样。使用方法组初始化时,不能使用var
。从documentation,我强调:
var只能在同一语句中声明和初始化局部变量时使用;变量无法初始化为null,或方法组或匿名函数。
在您的代码中,ButtonEquals_Click
是一个方法组。
如果您希望使用方法组对其进行初始化,则必须明确说明变量的类型。
但是,很明显您并不想将方法组分配给局部变量。正是你想要做的,我无法从这里看出来。
在我看来,你还没有完全掌握事件驱动的编程。您需要等到用户单击该按钮,然后在事件处理程序中响应该按钮单击。要了解事件处理程序的事情是系统调用它们,而你却没有。
因此,您可能需要做的是将if语句中的代码移动到ButtonEquals_Click
事件处理程序中。当你这样做时,你仍然会有很多编译器错误,但这是朝着正确方向迈出的一步。
我认为,下一步是尝试更多地了解事件驱动编程。从空项目开始,添加几个按钮。添加执行不同操作的单击事件处理程序。例如,他们可能会使用不同的消息调用MessageBox.Show
。然后运行程序并单击按钮。请注意,按钮事件处理程序仅在用户单击按钮时执行。然后看看你的代码。请注意您的代码在ButtonEquals_Click
事件处理程序中什么都不做,但是尝试从ButtonTimes_Click
调用该事件的方法。确保您完全理解框架在响应用户输入之前调用事件。
答案 1 :(得分:0)
我认为这是一个比你想象的更复杂的项目。当用户单击时间(乘法)按钮时,您还无法计算结果,因为它们尚未提供第二个操作数。
如果用户输入“100”然后点击乘法按钮,你怎么计算任何东西?
当它们成倍增加时,你必须将它们输入的值存储为“旧”值,清除文本,并记住它们通过使用枚举变量进行相乘的事实。然后,当它们执行下一个操作(例如单击等号)时,您将使用当前值(在这种情况下,旧值*新值)对旧值执行操作,并将结果存储在旧值中。
答案 2 :(得分:0)
将您的程序视为基于事件的程序。每个函数基本上都是事件处理程序,我可以看到你正确处理所有数字按钮单击事件和十进制按钮单击事件。但是,在事件处理程序ButtonTimes_Click()中,你做错了,正如David指出的那样。
我的建议是在ButtonTimes_Click()中,您将存储运算符(代码中的equation1和equation2)。然后在ButtonEquals_Click()中,您将基于之前保存的运算符进行乘法,并将结果分配回CalcForm.Text,然后清除运算符。