2017-03-09 51 views
0

这是我在StackOverflow上的第一篇文章,请友好:D!C#:更新小计文本框瞬间给出4个组合框选择

我正在开发一个餐厅账单计算器。由于四个组合框的用户输入:饮料,开胃菜,主菜甜品&,我有代码计算分类汇总,税和总。对于每个组合框,我都有一个与每个项目相关的预定义项目和值的列表。我已经能够成功地编码了。当用户选择他们的项目时,我有我的小计,提示0​​总文本框自动更新。小计= bevPrice + appPrice + mainPrice + dessPrice。税额=小计* .1M。总计=小计+税。

我的问题:说一个用户输入他们对每个类别(饮料,应用程序,主要,甜点)的选择。然后,假设用户返回饮料(combobox1)并决定将其从一个选项更改为另一个选项。即使选择了一个选项,我的代码也会将其他选择清零。同样,假设用户输入了全部四个选项,然后返回更改其主菜单(combobox3),我的代码保存为combobox1 & 2(饮料&开胃菜),在新选主菜单中添加,但是删除了combobox4(甜点)。

我知道这个问题即将出现,因为selectionindexchanged事件处理程序。如果combobox2的选择被改变,那么它会计算combobox 1 & 2,但在combobox3 & 4中没有发生变化,因此它将其恢复为0值。对?

我确定答案很明显,但我是一个新手。谢谢!

不管怎么说,这里是我的代码预览(对不起,我太冗长):

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Menu bevSelect = comboBox1.SelectedItem as Menu; 
     textBox3.Text = Convert.ToString(bevSelect.bevPrice); 

    } 

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Menu appSelect = comboBox2.SelectedItem as Menu; 
     Menu bevSelect = comboBox1.SelectedItem as Menu; 
     textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice); 
    } 

    private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Menu mainSelect = comboBox3.SelectedItem as Menu; 
     Menu appSelect = comboBox2.SelectedItem as Menu; 
     Menu bevSelect = comboBox1.SelectedItem as Menu; 
     textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice + mainSelect.mainPrice); 
    } 

    private void comboBox4_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Menu dessSelect = comboBox4.SelectedItem as Menu; 
     Menu mainSelect = comboBox3.SelectedItem as Menu; 
     Menu appSelect = comboBox2.SelectedItem as Menu; 
     Menu bevSelect = comboBox1.SelectedItem as Menu; 
     textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice + mainSelect.mainPrice + dessSelect.dessPrice); 

而这里的a video

+0

只要检查每个组合框,每当它们中的任何一个被更改时。 –

+0

我不确定这里的问题是什么。看来你要求**我们向你解释**你写的代码**。那是对的吗? –

+0

@KenWhite对不起,我想知道为什么它不按顺序工作以及如何解决问题,但我提出了一个解决方案。谢谢! – Amburger

回答

1

发生这种情况是因为在您的第一个处理函数中,仅使用第一个组合框中的计算来填充文本框。您应该根据所有4个选定项目制作计算账单的函数,并且应该在您的SelectedIndexChanged处理程序中调用它。基本上你的方法应该做你最后的处理程序。

private void comboBox1/2/3/4_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    calculateBill(); 
} 

private void calculateBill() 
{ 
    Menu dessSelect = comboBox4.SelectedItem as Menu; 
    Menu mainSelect = comboBox3.SelectedItem as Menu; 
    Menu appSelect = comboBox2.SelectedItem as Menu; 
    Menu bevSelect = comboBox1.SelectedItem as Menu; 
    textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice + mainSelect.mainPrice + dessSelect.dessPrice); 
} 
+0

打败我吧。我正打算提交我的答案大声笑。 –

+0

我得到一个“System.NullReferenceException”对textbox3.Text = Convert.ToString(x + y ... + z) – Amburger

+0

没关系,我解决了它。谢谢! – Amburger