这是我的第一篇文章,我对C#相当新 我正在尝试创建一个Celsius到Fahrenheit转换器,反之亦然。
我有两个文本框,用户可以在Celsius文本框中输入一个数字,华氏度将自动计算并显示在华氏度文本框中,或者用户可以输入华氏度,并计算并输出摄氏度值。
这是我到目前为止的代码,这是一个WFA。
private void txtCelsius_TextChanged(object sender, EventArgs e)
{
///*
if(string.IsNullOrEmpty(txtCelsius.Text))
{
txtFahrenheit.Clear();
return;
}
txtFahrenheit.Text = ((double.Parse(txtCelsius.Text)) * 1.8 + 32).ToString();
//*/
}
private void txtFahrenheit_TextChanged_1(object sender, EventArgs e)
{
///*
if (string.IsNullOrEmpty(txtFahrenheit.Text))
{
txtCelsius.Clear();
return;
}
txtCelsius.Text = ((double.Parse(txtFahrenheit.Text)) / 1.8 - 32).ToString();
//*/
}
显然,当我运行它并将值输入到任一文本框中时,它将创建一个无限循环。如果我评论一个或另一个,它适用于另一个。
有人可以帮忙吗?有没有办法可以做类似下面的伪代码。
if textbox1 is getting input
textbox2.input = disabled
do calculations and display
if textbox2 is getting input
textbox1.input = disabled
do calculations and display
如果尝试寻找解决方案,但发现很难说出我正在寻找的内容并且找不到解决方案。
PS。我在其他帖子中一直看到这个,这不是功课,我只是想拿出小程序来学习。
答案 0 :(得分:0)
您正在进入一个无限循环,因为每次更新其他文本框时,它都会触发TextChanged事件。要处理此问题,请添加一个变量来控制何时更新使用TextChanged代码。
bool _updating = false;
private void txtCelsius_TextChanged(object sender, EventArgs e)
{
if (!_updating)
{
try
{
_updating = true;
///*
if(string.IsNullOrEmpty(txtCelsius.Text))
{
txtFahrenheit.Clear();
return;
}
txtFahrenheit.Text = ((double.Parse(txtCelsius.Text)) * 1.8 + 32).ToString();
//*/
}
finally
{
_updating = false;
}
}
}
private void txtFahrenheit_TextChanged_1(object sender, EventArgs e)
{
if (!_updating)
{
try
{
_updating = true;
///*
if (string.IsNullOrEmpty(txtFahrenheit.Text))
{
txtCelsius.Clear();
return;
}
txtCelsius.Text = ((double.Parse(txtFahrenheit.Text)) / 1.8 - 32).ToString();
//*/
}
finally
{
_updating = false;
}
}
}