2017-06-24 12 views
0

私のUWPアプリケーションには、ユーザー入力のための10x3テキストボックスのページがあります。 私はそれらの間で計算して、3つの他にそれを示しています。「同じコード」を使用する複数のテキストボックス

私は今すぐ働くことができました。 しかし、他はすべて同じコードです。 コードをもう一度書くのではなく、異なるテキストボックス名でもう一度やり直すのではなく、すべてのテキストボックスに対してよりスマートな方法がありますか?

ここには、テキストボックスの最初の行のコードがあります。

public sealed partial class Januar : Page 
{ 
     CultureInfo danish = new CultureInfo("da-DK"); 

    public Januar() 
    { 
     this.InitializeComponent(); 
    } 
    private void KilometerEt_LostFocus(object sender, RoutedEventArgs e) 
    { 
     if (!string.IsNullOrEmpty(KilometerEt.Text)) 
      KilometerKortEt.Text = Convert.ToString(Convert.ToInt32(KilometerEt.Text) - Convert.ToInt32(MainPage.Current.KmTaller.Text)); 
     else 
      KilometerKortEt.Text = ""; 
    } 
    private void LiterEt_LostFocus(object sender, RoutedEventArgs e) 
    { 

     if (!string.IsNullOrEmpty(LiterEt.Text)) 
     { 
      KortPerLiterEt.Text = Math.Round(Convert.ToDecimal(KilometerKortEt.Text)/Convert.ToDecimal(LiterEt.Text, danish), 2).ToString(danish); 
     } 
     else 
      KortPerLiterEt.Text = ""; 
    } 
    private void PrisEt_LostFocus(object sender, RoutedEventArgs e) 
    { 
     if (!string.IsNullOrEmpty(PrisEt.Text)) 
     { 
      PrisPerLiterEt.Text = Math.Round(Convert.ToDecimal(PrisEt.Text, danish)/Convert.ToDecimal(LiterEt.Text, danish), 2).ToString(danish); 
     } 
     else 
      PrisPerLiterEt.Text = ""; 
    } 
} 

あなたが私がそこでやっていることをやり遂げるためのより簡単な方法があれば教えてください。私は、あなたが基本的に同じロジックで各テキストボックス(すなわちUIElement.LostFocus)の同じイベントを処理しているので、あなたは、単一の方法でそれを行うことができ、事前

+1

はい、MVVMを学んでください。たとえば、KilometerKortEtとLiterEtのペアがあるようです。あなたは、2つの異なる名前を持つ別のペアとして、そのテキストボックスのペア間の関係を繰り返すのですか?もしそうなら、それは小さなビューモデルでなければならず、それを表示するDataTemplateが必要です。 –

+0

イベントハンドラを1つだけ使用し、senderオブジェクトパラメータを使用できます。例https://stackoverflow.com/a/44247669/2946329 –

+0

@ S.Akbariいいえ。しかし、何も送っていないテキストボックスはどうですか? – TheisTN

答えて

0

おかげ。これでCOMPLETE初心者ですそのシグネチャはイベントに対応するデリゲートのシグネチャと一致します。

<TextBox x:Name="TextBox1" LostFocus="TextBox_LostFocus" /> 
<TextBox x:Name="TextBox2" LostFocus="TextBox_LostFocus" /> 
<TextBox x:Name="TextBox3" LostFocus="TextBox_LostFocus" /> 

XAMLコードは、上記に(それらがコードビハインドに単方法TextBox_LostFocusによって処理される発射LostFocusイベント、

private void TextBox_LostFocus(object sender, RoutedEventArgs e) 
{ 
    var textBoxThatLostFocus = (TextBox)sender; 
} 

パラメータsenderがコントロールであるとこのような三個のテキストボックスを定義しますこのケースでは、TextBox)のイベントが処理され、そのプロパティは、その名前でコントロールを参照することで、上記のようにキャストすることでアクセスできます。

編集:他の人が指摘したように、MVVMデザインパターンを学ぶこと、それは「あなたの目標を達成するためになるだろうではないに言及、よく、構造化された保守性とテスト可能ですWindowsアプリケーションを開発し、あなたに非常に多くを助けますそれらの間で計算し、3つの他の "非常に簡単にそれを示しています。

+1

はい、本当の問題はここで彼はMVVMを使用していませんが、コードの背後にあることです... –

+0

そして、私はどちらもそれを取得しない - p!コードと情報をもっと与えるべきですか? – TheisTN

関連する問題