2017-01-09 100 views
1

我有关于付款按钮的问题。 我在建筑之前没有遇到错误,但在建立并单击付款按钮后,它会挂起。我认为它是因为lblTotalPrice.text,但我不知道如何解决它。单击按钮后冻结表单

public partial class Form1 : Form 
{ 
    int totalCost; 
    public double holDer; 



    public Form1() 
    { 
     InitializeComponent(); 
     this.cbo1.Items.AddRange(new object[] { "Lechon Kawali - 200", "Bicol Express - 300" 
      ,"Adobo - 350" }); 

    } 

    private void btnAdd_Click(object sender, EventArgs e) 
    { 
     lb1.Items.Add(cbo1.SelectedItem); 

     lb1.SelectedIndex = lb1.SelectedIndex ; 

     int z = 0; 

     if (cbo1.SelectedIndex == 0) 
     { 
      z = z + 1; 
     } 

     if (cbo1.SelectedIndex == 1) 
     { 
      z = z + 2; 
     } 
     if (cbo1.SelectedIndex == 2) 
     { 
      z = z + 3; 
     } 

     switch(z) 
     { 
      case 1: 
       totalCost = totalCost + 200; 
       break; 
      case 2: 
       totalCost = totalCost + 300; 
       break; 
      case 3: 
       totalCost = totalCost + 350; 
       break; 
     } 

     lblSubTotalCost.Text = ("Php " + totalCost.ToString()); 


    } 

    private void btnDelete_Click(object sender, EventArgs e) 
    { 
     int deleteCost = 0; 
     int itemCost = 0; 
     foreach (int selectedIndex in lb1.SelectedIndices) 
     { 
      itemCost = int.Parse(lb1.Items[selectedIndex].ToString().Split('-')[1]); 
      deleteCost += itemCost; lb1.Items.RemoveAt(selectedIndex); 
     } 

     totalCost = totalCost - deleteCost; 

     lblSubTotalCost.Text = ("Php " + totalCost.ToString()); 

     lb1.Items.Remove(lb1.SelectedItem); 
     if (lb1.Items.Count > 0) 
     { 
      lb1.SelectedIndex = 0; 
     } 
     else 
      MessageBox.Show("No orders"); 


    } 

    private void lblVAT_TextChanged(object sender, EventArgs e) 
    { 
     Add(); 
    } 
    private void lblSubTotalCost_TextChanged(object sender, EventArgs e) 
    { 
     multiply(); 
     Add(); 
    } 
    public void multiply() 
    { 
     int a; 
     double b = 0.12; 
     bool Valid = int.TryParse(totalCost.ToString(), out a); 

     if (Valid) 
      lblVAT.Text = (a * b).ToString(); 
     else 
      lblVAT.Text = "No VAT entered"; 

    } 

    private void lbTotalPrice_TextChanged(object sender, EventArgs e) 
    { 
     Add(); 
    } 


    public void Add() 
    { 
     int a; 
     int b; 

     bool AValid = int.TryParse(totalCost.ToString(), out a); 
     bool BValid = int.TryParse(lblVAT.Text, out b); 

     if (AValid && BValid) 
     { 
      lblTotalPrice.Text = ("Php " + (a + b).ToString()); 

     } 


    } 

    private void btnPayment_Click(object sender, EventArgs e) 
    { 
     holDer = double.Parse(tbPayment.Text) - double.Parse(lblTotalPrice.Text); 
     MessageBox.Show("Change: " + holDer.ToString()); 

    } 

} 
+0

你得到任何错误讯息?或者它只是挂起? – NicoRiff

+2

您是否尝试调试代码并找出代码执行的哪一行以及哪一行之后挂起了该表单。您可以将付款和价格texboxes的值分配给某些变量,并查看它们是否适合在调试时加倍解析。 –

+0

@NicoRiff在构建并单击付款按钮后,错误消息显示(输入字符串的格式不正确) – Mark

回答

0

我怀疑这是因为lblTotalPrice_TextChanged事件处理程序调用Add()然后改变lblTotalPrice.Text属性,从而导致事件再次触发,广告-infinitum?

+0

很有可能。 –

+0

我应该更改哪些代码先生? – Mark

+0

我删除了添加(),但它仍然不会工作 – Mark

1

正如您在评论中所述,您的问题不是您的应用程序挂起,而是问题在于您得到Input string was not in a correct format异常。

,它似乎是从该块:

private void btnPayment_Click(object sender, EventArgs e) 
{ 
    holDer = double.Parse(tbPayment.Text) - double.Parse(lblTotalPrice.Text); 
    MessageBox.Show("Change: " + holDer.ToString()); 
} 

由于它是一个不是很复杂的代码,你的问题似乎当你您铸造文本框,以双待。请确保您使用的是双值的正确分离和你没有任何奇怪的字符在tbPayment

尝试使用的TryParse方法:

double res; 

if(double.TryParse(tbPayment.Text, out res)) 
{ 
    holDer = res - double.Parse(lblTotalPrice.Text); 
    MessageBox.Show("Change: " + holDer.ToString()); 
} 
else 
{ 
    MessageBox.Show("Input a correct format"); 
} 
+0

仍然收到相同的错误先生。 – Mark

+0

tbPayment.Text的价值是什么? – NicoRiff

+0

和lblTotalPrice.Text的值是什么? – NicoRiff