点击按钮后冻结表格

时间:2017-01-09 14:18:06

标签: c#

我有关于付款按钮的问题。 我在构建之前没有遇到错误,但在构建并单击付款按钮后,它会挂起。我认为这是因为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());

    }

}

2 个答案:

答案 0 :(得分: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());
}

由于它是一个不是很复杂的代码,您的问题似乎是在将文本框转换为Double时。确保您使用正确的分隔符表示双值,并且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");
}

答案 1 :(得分:0)

我怀疑它是因为lblTotalPrice_TextChanged事件处理程序调用{​​{1}}然后更改Add()属性,导致事件再次触发,ad -infinitum?

相关问题