首页 文章

保存计算的操作数

提问于
浏览
1

所以,这是主要的想法,我正在尝试制作一个计算器 .

private void _1_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "1";
        resultBox.Text = resultBoxText;
    }
    private void _2_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "2";
        resultBox.Text = resultBoxText;
    }
    private void _3_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "3";
        resultBox.Text = resultBoxText;
    }
    private void plus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "+";
        resultBox.Text = resultBoxText;
    }

    private void minus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "-";
        resultBox.Text = resultBoxText;
    }

上面的代码是为用户输入数字或操作数时文本框中的文本更改 . 现在,我如何进行实际计算?在一个单独的函数(带参数)?是一个足以容纳所有操作数的变量还是应该创建一个数组?如何输入,我如何将它们添加到一起?例如:我按“2”然后按“”然后按“3”,我如何在结果中收集它们?我真的不知道如何开始:/

2 回答

  • 0

    如果你只想添加/减去1,2,3,4那么一个变量就足够了 . 只需在事件处理程序中进行所有必要的计算即可 .

  • 0

    我最近尝试过做同样的事情 . 我想出了以下非常简单的解决方案 . 首先,添加对COM库的引用 MSScriptControlhow to add and remove references in VS) . 然后,在所有数字按钮点击事件之后:

    private void _1_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "1";
        resultBox.Text = resultBoxText;
    }
    private void _2_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "2";
        resultBox.Text = resultBoxText;
    }
    private void _3_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "3";
        resultBox.Text = resultBoxText;
    }
    private void plus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "+";
        resultBox.Text = resultBoxText;
    }
    
    private void minus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "-";
        resultBox.Text = resultBoxText;
    }
    

    为你的equals按钮添加一些代码:

    private void equals_button_Click(object sender, RoutedEventArgs e)
    {
        MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
        sc.Language = "VBScript";
        //Using try catch statement just in case a user enters an invalid expression. 
        //This becomes more useful when the application gets more advanced. 
        try
        {
            object result = sc.Eval(resultBoxText);
            //Output the result somehow. E.g.: resultBox.Text = result.ToString();
        }
        catch
        {
            MessageBox.Show("Invalid expression!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    

    只需少量代码,就可以使用“7 * 9-6 3/6”这样的字符串,并返回“57.5”的正确答案 . 但是,我必须提到的一件事是,它无法正确处理像“1(1)”这样的字符串 . 从技术上讲,它应该将其视为“1 * 1”,但它只会引发错误 . 所以,我不得不做一些编码来解决这个问题 . 但是当你来到它时我会让你穿过那座桥...... :)

    我可能会添加一件事:如果您的数字按钮都包含"1"或"2"或"+"的简单文本,那么您可以大量压缩按钮点击次数 .

    private void num_button_click(object sender, RoutedEventArgs e)
    {
        Button b = (Button)sender;
        resultBoxText += b.Text;
        resultBox.Text = resultBoxText;
    }
    

    然后,对于 all 您的数字按钮,只要单击它们,就可以将它们引用到num_button_click代码 . 这也适用于所有操作员按钮("+") .

    另一方面,如果您的按钮包含“click for one”等文本,那么只需坚持原始代码;不理我 .

    我刚刚意识到你所有的点击事件都有 RoutedEventArgs . 你在使用WPF吗?我只是假设它是winforms . 好吧,无论如何,代码应该仍然可以工作......我希望这就是你要找的东西 .

相关问题