C# 点击按钮后冻结表单

C# 点击按钮后冻结表单,c#,C#,我有一个关于付款按钮的问题。 我在构建之前没有遇到错误,但在构建并单击“付款”按钮之后,它会挂起。我想这是因为lblTotalPrice.text,但我不知道如何修复它 public partial class Form1 : Form { int totalCost; public double holDer; public Form1() { InitializeComponent(); this.cbo1.Items.A

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

    }

}

我怀疑这是因为
lblTotalPrice\u TextChanged
事件处理程序调用
Add()
,然后更改
lblTotalPrice.Text
属性,导致事件再次触发,无限期?

正如您在评论中所述,您的问题不是您的应用程序挂起,但问题是您得到的
输入字符串格式不正确
异常

似乎是从这个街区:

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");
}

您是否收到任何错误消息?或者它只是挂起?您是否尝试过调试代码,并确定代码在哪一行执行良好,以及在哪一行之后挂起表单。您可以将payment(付款)和price(价格)文本框的值指定给某些变量,并查看它们是否适合在调试时解析为double。@Nicorif在生成并单击payment(付款)按钮后,错误消息显示(输入字符串的格式不正确)@ChetanRanpariya我调试代码并运行,但在输入和之后,在付款框中单击付款按钮。它将挂起并显示错误(输入字符串的格式不正确)。您可以调试代码,并在单击按钮时查看值是否正确。你也可以检查Moo Juice怀疑的原因。Label changed event和Add method正在互相调用,以便它们可能进入jnfiteQuite。@标记是否调试了click事件并查看发生了什么?是。调试后,单击“付款”按钮,错误显示(FormatException未受影响)。我将lblTotalCost.Text更改为lblVAT have Add();这个按钮起作用了。对于lblTotalCost,我必须更改哪些代码?tbPayment.Text的值是多少?lblTotalPrice.Text的值是多少?我将在tbPayment中输入300,lblTotalPrice是200。单击按钮时,我希望更改:100。但是(FormatException未受影响)显示。