2010-04-22 10 views
0

Comment construire une nouvelle variable en C#.C#: Comment construire une variable à partir d'une autre variable

Je veux dire, pour avoir qqch comme ça

public void updateXXX(string endingOfVariable, int newValue) 
{ 
    this.textBox_{endingOfVariable} = newValue; 
} 

Ceci est mis en œuvre en Php:

$a = 'var'; $b = 'iable'; 
$variable = 'var'; 
echo ${$a.$b}; 

Mais peut-être il est possible en C#.

Le problème est que - j'ai créé ~ 500 textBoxes dans C# Windows Form, et si je veux définir une valeur, j'ai besoin de construire un commutateur() {case :; } statment avec les cas de 500.

+0

Je vais copier-coller ma réponse à un message: "Je les ai déjà créés sous forme de fenêtres sous forme de programmation visuelle (faites glisser et déposez-les, puis formatez-les quand j'en ai besoin) - que puis-je faire? – ozzWANTED

+0

Inspirez-vous d'une Apple ou d'une interface utilisateur Google typique ;-) http://stuffthathappens.com/blog/2008/03/05/simplicity/ – dtb

Répondre

4

Ignorant le fait que vous faites une instruction switch avec 500 cas, vous pouvez utiliser la méthode FindControl, et de le jeter à une zone de texte.

((TextBox)FindControl("textbox_" + endingOfVariable)).Text = newValue; 
7

Si vous avez attribué un nom à chaque zone de texte, vous pouvez créer la cartographie dictionnaire des noms à des contrôles:

var boxes = form.Controls.OfType<TextBox>().ToDictionary(t => t.Name); 

public void Update(string name, int newValue) 
{ 
    boxes[name].Text = newValue.ToString(); 
} 
+0

@dtb: +1, C'est une façon très simple de construire le dictionnaire. –

+2

Vous devez ajouter un .Where (t =>! String.IsNullOrEmpty (t.Name)) avant le ToDictionary pour éviter d'intercepter les TextBox sans nom et provoquer une exception créant le dictionnaire. – chuckj

0

Avoir 500 zones de texte dans un formulaire Windows peut être un problème en soi (trop de nombreux contrôles peuvent être lents). Une façon de procéder consiste à placer les contrôles dans un dictionnaire lorsque vous les créez (nous espérons que vous les créez par programme), puis utilisez la clé du dictionnaire pour retirer le contrôle dont vous avez besoin.

+0

Je les ai déjà créés sous forme de fenêtres sous forme de programmation visuelle (faites glisser et déposez-les, puis formatez-les selon vos besoins). Que puis-je faire maintenant? – ozzWANTED

+1

Vous avez glissé et déposé manuellement les textboxs _500_ et vous les avez renommés? Yikes, j'espère que vous avez été payé. –

+0

Yep, Dans mon travail, je devais - 'vous devez le faire, et c'est votre problème si vous ne voulez pas comment', alors 'j'ai': D – ozzWANTED

0

Vous devez utiliser la réflexion

static void Main(string[] args) 
    { 
    Type type = typeof(MyClass); 
    object o = Activator.CreateInstance(type); 

    FieldInfo field = type.GetField("text", BindingFlags.NonPublic | BindingFlags.Instance); 
    field.SetValue(o, "www.domain.com"); 
    string text = (string)field.GetValue(o); 

    Console.WriteLine(text); 

    } 

de java2s

+4

Il n'a pas ** besoin ** d'utiliser Reflection. FindControl serait beaucoup plus intelligent, imo. – ANeves

+0

@sr pt: Oui, je suis d'accord, la réflexion est la solution générale, mais avec les contrôles de formulaires, FindControl est probablement mieux. Je n'y ai pas pensé. –

-1

Pas moyen mec. Vous ne pouvez pas faire ça.

Questions connexes