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”,我如何在结果中收集它们?我真的不知道如何开始:/

4

2 回答 2

0

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

于 2013-10-31T22:40:30.710 回答
0

我最近尝试做同样的事情。我想出了以下非常简单的解决方案。首先,添加对 COM 库的引用MSScriptControl如何在 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;
}

为您的等号按钮添加一些代码:

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;
}

然后,对于所有数字按钮,只要单击它们,就将它们引用到 num_button_click 代码。这也适用于所有操作员按钮(“+”)。

另一方面,如果您的按钮包含“click for one”之类的文字,那么请坚持使用您的原始代码;不理我。

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

于 2013-11-04T03:29:01.973 回答