繁体   English   中英

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

[英]C# - Copy input from one textbox to another and vise versa

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

您正在进入无限循环,因为每次更新其他文本框时,它都会触发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;
     }
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM