C# - 将输入从一个文本框复制到另一个文本框,反之亦然
C# - Copy input from one textbox to another and vise versa
这是我的第一个 post,我对 C# 还很陌生
我正在尝试创建摄氏度到华氏度转换器,反之亦然。
我有两个文本框,用户可以在摄氏度文本框中输入数字,华氏度会自动计算并显示在华氏度文本框中,或者用户可以在华氏度中输入数字,然后计算摄氏度值并显示在华氏度文本框中输出。
这是我目前的代码,这是一个 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。我一直在其他 post 看到这个,这不是作业,我只是想想出小程序来学习。
您正在进入无限循环,因为每次更新其他文本框值时都会触发 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;
}
}
}
这是我的第一个 post,我对 C# 还很陌生 我正在尝试创建摄氏度到华氏度转换器,反之亦然。
我有两个文本框,用户可以在摄氏度文本框中输入数字,华氏度会自动计算并显示在华氏度文本框中,或者用户可以在华氏度中输入数字,然后计算摄氏度值并显示在华氏度文本框中输出。
这是我目前的代码,这是一个 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。我一直在其他 post 看到这个,这不是作业,我只是想想出小程序来学习。
您正在进入无限循环,因为每次更新其他文本框值时都会触发 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;
}
}
}