2017-06-24 1 views
0

Mon application UWP comporte une page avec des zones de texte 10x3 pour la saisie par l'utilisateur. Je calcule ensuite entre eux et le montre dans 3 autres.Plusieurs zones de texte utilisant le même code

J'ai le premier à travailler maintenant. mais tous les autres sont "le même code". Y at-il une façon plus intelligente de le faire pour toutes les zones de texte au lieu d'écrire le code encore et encore avec des noms de zone de texte différents.

Voici le code de la première ligne de zones de texte.

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 = ""; 
    } 
} 

Et si les gars vous avez un moyen plus facile de faire ce que je fais là-bas, ne hésitez pas à le dire. Je suis un débutant à ce ..

Merci à l'avance

+1

Oui, apprenez MVVM. Vous semblez avoir des paires, par exemple KilometerKortEt et LiterEt. Répétez-vous la relation entre cette paire de zones de texte comme une autre paire avec deux noms différents? Si vous êtes, cela devrait être un peu viewmodel, avec un DataTemplate pour l'afficher. –

+0

Vous pouvez utiliser un seul gestionnaire d'événements, puis utiliser le paramètre de l'objet expéditeur. Un exemple https://stackoverflow.com/a/44247669/2946329 –

+0

@ S. Akbari Okay. Mais qu'en est-il de la boîte de texte qui n'envoie rien? – TheisTN

Répondre

0

Puisque vous gérez le même événement de chaque TextBox (c.-à-UIElement.LostFocus) avec essentiellement la même logique, vous pouvez le faire avec une seule méthode, dont la signature correspond à celle du délégué correspondant à l'événement.

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

Le code XAML ci-dessus définit trois zones de texte telles que les LostFocus événements qu'ils déclenchent sont traitées par une seule méthode TextBox_LostFocus dans le code sous-jacent,

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

Le paramètre sender est le contrôle (en ce cas, le TextBox) dont l'événement a été géré, et ses propriétés peuvent être accessibles en le moulant comme ci-dessus, rendant inutile la référence au contrôle par son nom. L'apprentissage du modèle de conception MVVM vous aidera beaucoup à développer des applications Windows qui sont bien structurées, maintenables et testables, sans compter que cela permettrait d'atteindre votre objectif de " calculer entre eux et le montre dans 3 autres "assez facile.

+1

Oui, mais le vrai problème ici est qu'il n'utilise pas MVVM, mais le code derrière ... –

+0

Et je ne comprends pas non plus ;-p! Dois-je vous donner plus de code et d'infos? – TheisTN