Използвайте EVENT management. Всеки път, когато се ъпдейтва някой контрол, променяйте стойността на общата сума. Прилагам кратък, набързо спретнап пример като прикачен файл.
Би следвало да има процедура, която изчиства всички избрани екстри, всеки път когато се промени избора на основния продукт, нямам време да го покажа тук.
Успех!
Забележка: Обикновено листата с продуктите и техните цени не се вкарват фиксирано в кода, а се извличат от ценова листа посредством отделен метод в класа, който управлява продуктите, но това е част от по-широко решение на проблема. За нуждите на демонстрацията тук са кодирани директно в основния код на формата, което не е добра практика, защото усложнява поддръжката и актуализациите.
- Код: Избери целия код
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 FormsEventsExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt1 = new DataTable();
dt1.Columns.Add("Description", typeof(String));
dt1.Columns.Add("Price", typeof(Decimal));
dt1.Rows.Add("Margaritta pizza Small - 4.49", 4.49);
dt1.Rows.Add("Margaritta pizza Medium - 6.49", 6.49);
dt1.Rows.Add("Margaritta pizza Large - 8.99", 8.99);
dt1.Rows.Add("Pepperoni pizza Small - 5.99", 5.99);
dt1.Rows.Add("Pepperoni pizza Meduim - 7.99", 7.99);
dt1.Rows.Add("Pepperoni pizza Large - 9.99", 9.99);
dt1.Rows.Add("Quatro stagionni pizza Large - 14.50", 14.50);
dt1.Rows.Add("Capriciosa pizza Large - 18.50", 18.50);
cboProductMain.Items.Clear();
cboProductMain.DataSource = dt1;
cboProductMain.DisplayMember = "Description";
cboProductMain.ValueMember = "Price";
cboProductMain.SelectedIndex = 0;
txtPrice.Text = "0.00";
chkKetchup.Checked = false;
chkMayo.Checked = false;
chkSoySouce.Checked = false;
chkGarlicSauce.Checked = false;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
txtPrice.Text = cboProductMain.SelectedValue.ToString();
}
private void chkKetchup_CheckedChanged(object sender, EventArgs e)
{
if (chkKetchup.Checked)
{
double cPrice = double.Parse(txtPrice.Text) + 0.49;
txtPrice.Text = cPrice.ToString();
}
else
{
double cPrice = double.Parse(txtPrice.Text) - 0.49;
txtPrice.Text = cPrice.ToString();
}
}
private void chkMayo_CheckedChanged(object sender, EventArgs e)
{
if (chkMayo.Checked)
{
double cPrice = double.Parse(txtPrice.Text) + 0.49;
txtPrice.Text = cPrice.ToString();
}
else
{
double cPrice = double.Parse(txtPrice.Text) - 0.49;
txtPrice.Text = cPrice.ToString();
}
}
private void chkSoySouce_CheckedChanged(object sender, EventArgs e)
{
if (chkSoySouce.Checked)
{
double cPrice = double.Parse(txtPrice.Text) + 0.99;
txtPrice.Text = cPrice.ToString();
}
else
{
double cPrice = double.Parse(txtPrice.Text) - 0.99;
txtPrice.Text = cPrice.ToString();
}
}
private void chkGarlicSauce_CheckedChanged(object sender, EventArgs e)
{
if (chkGarlicSauce.Checked)
{
double cPrice = double.Parse(txtPrice.Text) + 0.99;
txtPrice.Text = cPrice.ToString();
}
else
{
double cPrice = double.Parse(txtPrice.Text) - 0.99;
txtPrice.Text = cPrice.ToString();
}
}
}
}
[tex]\color{lightseagreen}\text{''Който никога не е правил грешка, никога не е опитвал нещо ново.''} \\
\hspace{21em}\text{(Алберт Айнщайн)}[/tex]