2016-04-05 5 views
1

これは私の最初の投稿です。私はかなり新しいC# 摂氏から華氏へのコンバータを作成しようとしています。C# - 1つのテキストボックスから別のテキストボックスに入力をコピーし、その逆の場合は

2つのテキストボックスがあり、摂氏テキストボックスに数値を入力すると華氏が自動的に計算され、華氏のテキストボックスに表示されるか、ユーザーが華氏に入力して摂氏値を計算して出力します。

これまでのコードですが、これは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

他のテキストボックスの値を更新するたびに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; 
    } 
    } 
} 
+0

まだ動作しません。私はあなたが私に与えたものと遊びをします。ありがとう:) –

+0

私はあなたがテキストボックスをクリアしていたことも忘れていました。私は私の答えを修正し、それは今働くはずです。 – energ1ser

+0

うん、それは今動作します。本当にありがとう。 –

関連する問題