2017-06-24 30 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 = ""; 
    } 
} 

如果你們有更輕鬆的方式做我在那裏做的事情,隨時告訴。我是一個初學者在這個..

在此先感謝

+1

是的,學習MVVM。例如,您似乎有兩個對,即「KilometerKortEt」和「LiterEt」。你是否將這對文本框之間的關係重複爲另一個具有兩個不同名稱的對?如果你是,那應該是一個小視圖模型,用DataTemplate來顯示它。 –

+0

您只能使用一個事件處理程序,然後使用sender對象參數。示例https://stackoverflow.com/a/44247669/2946329 –

+0

@ S.Akbari好吧。但是那些不發送任何東西的文本框呢? – TheisTN

回答

0

既然你要處理的每個文本框的同一事件(即UIElement.LostFocus)基本一致的邏輯,你可以用單一的方法做到這一點,其簽名與事件對應的代表相匹配。

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

上面的XAML代碼定義了三個文本框,使得LostFocus事件,它們觸發由單個方法TextBox_LostFocus在代碼隱藏處理,

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

參數sender是控制(在這種情況下,TextBox)的事件被處理,並且它的屬性可以通過如上所述的轉換來訪問,從而不必通過其名稱來引用控件。正如其他人所指出的,學習MVVM設計模式將對開發Windows結構良好,可維護和可測試的Windows應用程序有很大的幫助,更不用說它可以實現您的「他們之間的計算,並顯示在其他3人「很容易。

+1

是的,但這裏真正的問題是,他沒有使用MVVM,但代碼隱藏在後面... –

+0

而我也沒有明白它;-p!我應該給你更多的代碼和信息嗎? – TheisTN

相關問題