2010-03-30 6 views
1

Dire que j'ai cette classe:C# mise à jour propriété d'instance de paramètre variable

class block999 
{ 
string parm1; 
string parm2; 
string parm3; 
string parm4; 
string parm5; 

block999(){} 

setValue(object sender, RoutedEventArgs e) 
{ 
} 
} 

Et une forme avec ce code:

block999 B999 = new block999();  

TextBox parm1 = new TextBox(); 
TextBox parm2 = new TextBox(); 
TextBox parm3 = new TextBox(); 
TextBox parm4 = new TextBox(); 
TextBox parm5 = new TextBox(); 

parm1.LostFocus += new RoutedEventHandler(B999.setValue); 
parm2.LostFocus += new RoutedEventHandler(B999.setValue); 
parm3.LostFocus += new RoutedEventHandler(B999.setValue); 
parm4.LostFocus += new RoutedEventHandler(B999.setValue); 
parm5.LostFocus += new RoutedEventHandler(B999.setValue); 

Comment puis-je définir la propriété correcte dans la méthode setValue en supposant que le nom de la propriété d'instance == le nom des textboxes?

+0

Je voudrais créer un dictionnaire où une chaîne (couper et minuscule la valeur) pointe vers le gestionnaire d'événements appelable. C'est très facile en Python, mais la fonction est un citoyen de première classe là-bas. Cependant, .Net a récemment emprunté beaucoup de fonctionnalités à d'autres paradigmes, donc je parie que ça peut aussi faire ça. –

+0

Voulez-vous valider ces valeurs? Pourquoi voulez-vous référencer les valeurs d'autres variables de chaîne? –

+1

Attendez, je dois être confus ... si vous avez seulement 5 contrôles, alors ce n'est pas un tronçon terrible d'avoir 5 méthodes SetValue qui se comportent de manière très similaire. Peut-être que vous devriez utiliser WPF, où la liaison peut être créée de manière déclarative? –

Répondre

2

Étant donné que vous utilisez RoutedEventArgs, je suppose que vous utilisez WPF (ou peut-être SL).

Je pense que la meilleure option serait de configurer data bindings entre les zones de texte et les champs de votre classe. Si vous ne voulez pas faire cela, je vous recommande de mettre à jour tous les champs chaque fois que l'une des zones de texte change.

Il n'existe aucun moyen d'accéder au nom d'une variable locale à partir du code. Vous ne pouvez donc probablement pas obtenir les noms des zones de texte. Si ce sont des champs ou des propriétés de votre classe, vous pouvez théoriquement le faire en utilisant la réflexion, mais je ne recommanderais pas cela comme solution.

1

Définissez ce que vous entendez par "le nom des zones de texte". Le nom de la variable à laquelle elle est assignée (temporairement) n'a aucun sens. Vous pouvez utiliser la propriété Name du contrôle, sauf dans l'exemple que vous publiez, vous ne l'attribuez jamais. Si vous l'étiez, ce serait juste:

setValue(object sender, RoutedEventArgs e) 
{ 
     TextBox tb = sender as TextBox; 
     switch(tb.Name) 
     { 
      case "parm1": 
      this.parm1 = .... 
      // etc 

     } 
} 
Questions connexes