2008-12-12 8 views
0

J'utilise My.Settings dans visual studio 2008 pour stocker des informations, lorsque l'utilisateur exécute à nouveau le programme.VB.NET ..... Boucle d'aide

je fonctionne bien que ... mais comme j'utilise 12 textboxes Je ne veux pas écrire ...

my.settings.grade1 = TextBox1.Text

pour chacun d'eux, et je fais aussi des calculs en utilisant les informations stockées, donc je ne veux pas d'écrire my.settings.grade1 + my.settings.grade2 etc ..

Toute aide bienvenue

Merci =)

+0

Veuillez coller le code spécifique avec lequel vous rencontrez un problème. –

Répondre

1

Dans votre formulaire contenant les zones de texte, ajoutez-les à une collection ou un tableau de zones de texte lorsque le formulaire est initialisé.

Ensuite, parcourez la collection ou le tableau de zones de texte à affecter à la valeur de paramètre. Si vous ne voulez pas coder manuellement l'affectation des zones de texte dans la matrice, dans le code d'initialisation de votre formulaire, passez en revue tous les contrôles du formulaire et vérifiez le type de contrôle ou une variable spécifique que vous affectez à chaque zone de texte, puis ajoutez chaque zone de texte au tableau de cette façon.

For Each c as Control in Me.Controls 

If c.Tag.ToString() = "Grade" Then 
    ' Add Items to collection here ' 
End If 

Next c 
-1

Voulez-vous dire quelque chose comme?

Dim sum As Long 
    Dim grades(11) As Long 

    Dim i As Integer = 0 
    For Each ctr In Controls 
     If TypeOf (ctr) Is TextBox Then 
      grades(i) = CLng(ctr.Text) 
      sum = sum + grades(i) 
      i = i + 1 
     End If 
    Next 
+0

comment savez-vous que les contrôles sont dans le même ordre que les données? Vous ne voulez pas parcourir tous les contrôles dans le formulaire car vous pouvez avoir des contrôles qui n'ont pas besoin de valeurs assignées. – Victor

+0

L'OP n'a pas spécifié de détails. J'essayais juste de présenter une méthode possible - le code réel devrait être adapté aux exigences spécifiques. –

+0

S'il y a autre chose qu'une zone de texte de catégories, vos index finiraient hors des limites. –

0

ou vous pouvez faire quelque chose comme ceci:

compte tenu des vos zones de texte sont nommés dans le sens de: Grade1, Grade2, Grade3, etc.

vous pouvez stocker les notes dans un tableau puis bouclez dans le tableau:

((TextBox)form.findControl("Grade" + i.ToString())).Text = Grade(i) 

En fonction de votre calcul, vous pouvez également exécuter le calcul à l'intérieur de la boucle.

+0

Oui, c'est mieux que mon idée (si le nom de la zone de texte contient l'index de la note). –

0

POPULATE une liste de qualité textboxes:

'at the class level' 
Public GradeBoxes(11) As TextBox 
Const grade As String = "GRADE" 

'when the form is created' 
Dim i As Integer = 0 
For Each ctr As Control In Controls 
    If TypeOf (ctr) Is TextBox AndAlso ctr.Name.ToUpper.StartsWith(grade) Then 
     i = CInt(ctr.Name.SubString(grade.Length)) 
     If i >= 0 AndAlso i < GradeBoxes.Length Then GradeBoxes(i) = ctrl 
    End If 
Next ctr 

For Each box As TextBox in GradeBoxes 
    If box IsNot Nothing AndAlso My.Settings(box.Name) IsNot Nothing Then 
     box.Text = My.Settings(box.Name) 
    End If 
Next box 

Enregistrer les qualités:

For Each box As TextBox in GradeBoxes 
    If box IsNot Nothing AndAlso My.Settings(box.Name) IsNot Nothing Then 
     My.Settings(box.Name) = box.Text 
    End If 
Next box 
My.Settings.Save() 
1

Avez-vous pensé à utiliser pour lier ApplicationSettings Binding automatiquement vos valeurs à vos propriétés Textboxes.Text. Cela prendra en charge la liaison bidirectionnelle, puis tout ce que vous avez à faire est d'appeler Enregistrer lorsque vous fermez.