下面的代码不断给我一个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();
我看不到问题。 PS该应用程序正在用Winforms开发。
答案 0 :(得分:0)
代码中的问题很简单,但很难看到...
txtNetWeight_TextChanged
上面的代码更改txtMaking的值
txtMaking_TextChanged
在此处理程序更改txtNetWeight值的同时,开始了递归循环。
因此,我添加了一个变量(布尔值)来检查其他属性是否已更改。然后仅允许使用一个TextChanged属性为每个文本框设置值。