StackOverFlowException不断用这段代码打我

时间:2019-03-18 10:27:03

标签: c# winforms exception

下面的代码不断给我一个stackoverflowexception。

我有一个form_Load()函数,该函数会在加载时清除所有值。然后我添加代码以填充数据库中的值并得到错误。

我正在尝试从数据库中获取产品,并填写winforms应用程序中的文本框。

代码如下:

private void txtNetAmount_TextChanged(object sender, EventArgs e)
    {
        try
        {
            decimal dcNetAmount = 0;
            decimal dcRate = 0;
            decimal dcWeight = 0;
            decimal dcGrossAmount;
            decimal dcMaking = 0;
            decimal dcDicount = 0;
            //TODO: calculate stone price
            //TaxAmountCalculation();

            if (EditingMakingAmount == false && EditingDiscountAmount == false)
            {
                if (txtNetAmount.Text.Trim() != string.Empty)
                {
                    dcNetAmount = Convert.ToDecimal(txtNetAmount.Text.Trim());
                }
                if (txtRate.Text.Trim() != string.Empty)
                {
                    dcRate = Convert.ToDecimal(txtRate.Text.Trim());
                }
                if (txtWeight.Text.Trim() != string.Empty)
                {
                    dcWeight = Convert.ToDecimal(txtWeight.Text.Trim());
                }
                dcGrossAmount = dcRate * dcWeight;
                if (dcNetAmount > dcGrossAmount)
                {
                    dcMaking = dcNetAmount - dcGrossAmount;
                }
                else if (dcNetAmount < dcGrossAmount)
                {
                    dcDicount = dcGrossAmount - dcNetAmount;
                }
                txtMaking.Text = Math.Round(dcMaking, PublicVariables._inNoOfDecimalPlaces).ToString();
                txtDiscountAmount.Text = Math.Round(dcDicount, PublicVariables._inNoOfDecimalPlaces).ToString();
                txtAmount.Text = Math.Round(dcNetAmount, PublicVariables._inNoOfDecimalPlaces).ToString();
            }
        }
        catch (Exception ex)
        {
            formMDI.infoError.ErrorString = "POS88:" + ex.Message;
        }
    }

在上面的代码中,异常在以下行:

txtMaking.Text = Math.Round(dcMaking, PublicVariables._inNoOfDecimalPlaces).ToString();

C# StackOverFlowException keeps hitting me with this code

我看不到问题。 PS该应用程序正在用Winforms开发。

1 个答案:

答案 0 :(得分:0)

代码中的问题很简单,但很难看到...

txtNetWeight_TextChanged

上面的代码更改txtMaking的值

txtMaking_TextChanged 

在此处理程序更改txtNetWeight值的同时,开始了递归循环。

因此,我添加了一个变量(布尔值)来检查其他属性是否已更改。然后仅允许使用一个TextChanged属性为每个文本框设置值。