为什么我的变量值是Visual C#的两倍

时间:2019-02-25 02:59:41

标签: c#

如果这最终只是一个简单的解决方案,请不要太讨厌我,我一直在这里坐着好一会儿,试图弄清楚这是怎么回事。

首先,这是我的问题:我正在向该函数传递CheckBox和一个常量变量。纯粹是为了让我不必重写8个基本相同的不同CheckBox的代码。

无论出于何种原因,每当我尝试在此函数中对priceOptionsTotal和totalPrice使用+ =运算符时,似乎都将y传递给它的内容加倍。例如,如果我向函数传递y作为0.15,它将显示为0.30。

我尝试在函数中本地执行操作,尝试使其返回值。我已经尝试过在表单中​​生成的CheckBox函数中执行此操作。我在某些RadioButtons中有类似的代码,并且其中的代码运行正常。

这是我正在谈论的功能:

private void IfChecked(CheckBox x, double y)
{
    if(x.Checked == true)
    {
        //Add to the private global variable
        pricedOptionsTotal += (decimal)y;
        totalPrice += (decimal)y;
    }
    else if(x.Checked == false) //Check if it was just unchecked
    {
        //Remove Y from the totals
        pricedOptionsTotal -= (decimal)y;
        totalPrice -= (decimal)y;
    }

    if (pricedOptionsTotal > 0) //Display the pricedOptionsTotal sum in a currency format
    {
        displayPricedOptions.Text = "Add " + pricedOptionsTotal.ToString("C");
    }
    else
    {
        displayPricedOptions.Text = " "; //Reset textBox
    }
}

这些是我的变量:

//Constant price for the base costs
private const double baseCost = 3.00; //Base cost of a burger is $3, comes with Cheddar, Swiss, or American cheese
private const double extraCheese = 0.15; //Increases the cost for more cheese.
private const double friedEgg = 0.50; //Cost of adding a Fried Egg
private const double withBacon = 0.50; //Cost of adding bacon
private const double spicyBurger = 0.75; //Cost of using special spices to make it spicy
private const double withGuacamole = 0.25; //Cost of guacamole
private const double doublePaddy = 1.00; //Cost of adding another beef paddy to the burger

//Constant price for the discount
private const double discount = 0.10; //10% discount

//Constant price for the fries
private const double sideOfFries = 3.00; //Cost of a side of fries

//Private price of priced options holder
decimal pricedOptionsTotal = 0.00m; //Price that gets displayed

//Private price of fries to use when calculating total
private decimal pricedFriesOption = 0.00m; //Fries that get displayed and added to total

//Private total price
private decimal totalPrice = (decimal)baseCost;

这开始让我觉得我的代码被诅咒了。

示例图片 enter image description here


编辑: 所以我现在想通了。通过Breakpoint的功能(感谢@mjwills提醒),我发现该功能可以按预期工作。现在的问题似乎是,一旦函数完成运行,CheckedChanges似乎又要运行一次。这意味着该功能需要再运行一段时间。

发布前的断点: enter image description here

它返回CheckBox的CheckedChanged生成的代码: enter image description here

在最终再次通过该函数并将其结论加倍我的0.15到0.30之前。像这样: enter image description here

我不知道为什么使用这些CheckBox来做到这一点。该函数绝对不是它的原因,否则我将不会收到任何消息,并且该程序将陷入循环。为什么这样做会令我感到困惑。

我在此程序中有RadioButtons,并且还有类似的代码,并且工作正常。

1 个答案:

答案 0 :(得分:0)

谢谢@Amit和@mjwills的帮助。由于您的帮助(并提醒您存在断点的事实,还有@Amit,我可能会在调试时使用Call Stack,这是Visual Studio的相对较新的问题),因此我发现它在Windows中被调用了两次。 CheckBoxes的事件。一旦进入CheckedChanged和CheckStateChanged。显然,我决定将CheckBox_CheckedChanged调用放入这两个事件中。我真的很尴尬。

Woops.PNG