如果这最终只是一个简单的解决方案,请不要太讨厌我,我一直在这里坐着好一会儿,试图弄清楚这是怎么回事。
首先,这是我的问题:我正在向该函数传递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;
这开始让我觉得我的代码被诅咒了。
编辑: 所以我现在想通了。通过Breakpoint的功能(感谢@mjwills提醒),我发现该功能可以按预期工作。现在的问题似乎是,一旦函数完成运行,CheckedChanges似乎又要运行一次。这意味着该功能需要再运行一段时间。
它返回CheckBox的CheckedChanged生成的代码:
在最终再次通过该函数并将其结论加倍我的0.15到0.30之前。像这样:
我不知道为什么使用这些CheckBox来做到这一点。该函数绝对不是它的原因,否则我将不会收到任何消息,并且该程序将陷入循环。为什么这样做会令我感到困惑。
我在此程序中有RadioButtons,并且还有类似的代码,并且工作正常。
答案 0 :(得分:0)
谢谢@Amit和@mjwills的帮助。由于您的帮助(并提醒您存在断点的事实,还有@Amit,我可能会在调试时使用Call Stack,这是Visual Studio的相对较新的问题),因此我发现它在Windows中被调用了两次。 CheckBoxes的事件。一旦进入CheckedChanged和CheckStateChanged。显然,我决定将CheckBox_CheckedChanged调用放入这两个事件中。我真的很尴尬。