2009-09-25 21 views
0

Im créer une liste pour mettre à jour une base de données MySql avec les zones de texte de formulaire de valeurs, comment puis-je faire quelque chose comme ce travail?Puis-je utiliser des noms de zone de texte en tant que valeurs dans une liste?

si j'utilise le

verdierX[0] = (int)decimal.Parse(box1.Text); 

il fonctionne très bien mais lorsque je tente de l'utiliser dans une boucle comme celui-ci est Blowes vers le haut. Quelqu'un at-il une suggestion sur la façon de résoudre ce problème?

int[] dbNavnX = new int[8]; 
    int[] verdierX = new int[8]; 
    string[] boxList = new string[8]; 

    private void Form1_Load(object sender, EventArgs e) 
    { 

     boxList[0] = "box1.Text"; 
     boxList[1] = "box2.Text"; 
     boxList[2] = "box3.Text"; 
     boxList[3] = "box4.Text"; 
     boxList[4] = "box5.Text"; 
     boxList[5] = "box6.Text"; 
     boxList[6] = "box7.Text"; 
     boxList[7] = "box8.Text"; 
    } 

    private void sumX() 
    { 
     for (int sum = 0; sum < 8; sum++) 
     { 
      verdierX[sum] = (int)decimal.Parse(boxList[sum]); 
     } 
    } 
+0

compagnon Désolé, je ne comprends pas tout à fait ce que vous demandez, pourriez-vous préciser? –

+0

Vous n'attribuez pas le contenu des TextBoxes à boxList [] sur Form1_Load. Vous affectez une chaîne "box1.Text". – erelender

Répondre

1

Ou, que diriez-vous la bonté Linq:

var sumX = from Control control in Controls 
      where 
       control.GetType() == typeof (TextBox) 
       && control.Name.StartsWith("box") 
      select Convert.ToInt32(((TextBox)control).Text); 
+0

très agréable, juste ce dont j'ai besoin – Darkmage

+0

fonctionne aussi longtemps que vous n'avez pas d'autres TexBoxes dont le nom commence par "boîte" – M4N

2

Vous devez changer votre tableau boxList pour contenir des références aux zones de texte au lieu de cordes:

TextBox[] boxList = new TextBox[8]; 

et

boxList[0] = box1; 
boxList[1] = box2; 
... 

Ensuite, il fonctionnera.

+0

thx mate juste wat je étais après :) – Darkmage

+0

Idiot moi, je pensais qu'il voulait écrire moins de code ... Btw, il aura besoin de réécrire la méthode sumX(), car celui-ci attend des chaînes avec le contenu des boîtes de texte. .. –

0

Si vous n'utilisez pas WPF, vous pouvez accéder au "me.controls" qui est un tableau de tous les contrôles disponibles dans votre formulaire. Attention cependant, si votre zone de texte est sur un panneau ou un autre conteneur, vous utilisez ensuite object.controls pour obtenir la zone de texte.

Espérons que cela fonctionne.

1

Essayez:

int[] verdierX = new int[8]; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    for (var i = 0; i < 8; i++) 
    { 
     TextBox tb = (TextBox)FindControl("box" + i.ToString()); 
     verdierX[i] = (int)decimal.Parse(tb.Text); 
    } 
} 
+0

ah encore mieux, va essayer ça. – Darkmage

+0

Le nom "FindControl" n'existe pas dans le contexte actuel. Quel espace de noms système manque-t-il? – Darkmage

+0

@Darkmage: Désolé, je pensais que vous faisiez ASP ;-) Il est en fait très similaire (en dehors du nom Form1), et vous ne l'avez pas dit. –

Questions connexes