C# - 将输入从一个文本框复制到另一个文本框,反之亦然

时间:2016-04-05 04:21:22

标签: c# textbox

这是我的第一篇文章,我对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。我在其他帖子中一直看到这个,这不是功课,我只是想拿出小程序来学习。

1 个答案:

答案 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;
     }
   }
}