2017-06-24 17 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

相关问题