0

第二个帖子在这里,所以我最近开始了我的计算课程,我们正在研究 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;
}

有错误,还有什么你可以看到的错误吗?还是优化明智?这仅用于乘法,但是一旦我这样做了,我就可以轻松地将其复制过来,谢谢:)

4

3 回答 3

1

该错误与编译器所说的完全相同。var使用方法组进行初始化时不能使用。从文档中,我强调:

var 只能在同一语句中声明和初始化局部变量时使用;变量不能初始化为 null,也不能初始化为方法组或匿名函数。

在您的代码中,ButtonEquals_Click是一个方法组。

如果您希望使用方法组对其进行初始化,则必须明确说明变量的类型。

但是,很明显您并不想将方法组分配给局部变量。你到底想做什么,我无法从这里辨别出来。

在我看来,您似乎还没有完全掌握事件驱动编程。您需要等到用户单击按钮,然后在事件处理程序中响应该按钮单击。要了解事件处理程序的是系统调用它们,而您没有。

因此,也许您需要做的是将 if 语句中的代码移动到ButtonEquals_Click事件处理程序中。当你这样做时,你仍然会遇到很多编译器错误,但这是朝着正确方向迈出的一步。

我认为,您的下一步是尝试更多地了解事件驱动编程。从一个空项目开始并添加几个按钮。添加执行不同操作的单击事件处理程序。例如,他们可能会MessageBox.Show使用不同的消息进行呼叫。然后运行程序并单击按钮。请注意,按钮事件处理程序仅在用户单击按钮时执行。然后看看你的代码。请注意您的代码如何在ButtonEquals_Click事件处理程序中不执行任何操作,而是尝试从ButtonTimes_Click. 在继续之前,请确保您完全了解框架调用事件以响应用户输入。

于 2013-10-15T16:02:47.797 回答
0

我认为这是一个比您想象的更复杂的项目。当用户单击时间(乘法)按钮时,您还不能计算结果,因为他们还没有提供第二个操作数。

如果用户输入“100”然后点击乘法按钮,你怎么能计算出任何东西?

当他们点击乘法时,您必须将他们输入的值存储为“旧”值,清除文本,并记住他们通过使用枚举变量单击了乘法这一事实。然后稍后当他们执行下一个操作(例如单击等号)时,您会将旧值与当前值(在本例中为旧值*新值)执行操作并将结果存储在旧值中。

于 2013-10-15T16:14:49.930 回答
0

将您的程序视为基于事件的程序。每个函数基本上都是事件处理程序,正如我所见,您可以正确处理所有数字按钮单击事件和十进制按钮单击事件。但是,在事件处理程序 ButtonTimes_Click() 中,正如 David 所指出的那样,您做错了。

我的建议是,在 ButtonTimes_Click() 中,您将存储运算符(代码中的 equation1 和 equation2)。然后在 ButtonEquals_Click() 中,您将根据之前保存的运算符进行乘法运算,并将结果分配回 CalcForm.Text,然后清除运算符。

于 2013-10-15T16:20:14.077 回答