2014-05-07 1 views
0

J'ai plusieurs tableaux de zones de texte au niveau de la classe de formulaire. Lorsque je tente de parcourir ces tableaux avec une boucle pour chaque boucle, la valeur de mes variables de boucle est 'Nothing'. Voici mes tableaux de niveau de forme:tableau de contrôle de niveau de classe

Public Class frmTDSNew 

' Form level arrays to hold text boxes to fill and validate 
Dim decimalBoxes() As TextBox = New TextBox() {txtLenPerDrum, txtWeightPerDrum, txtEnamThick, txtEnamTolPos, txtEnamTolNeg, 
           txtEpoxyThick, txtEpoxTolPos, txtEpoxTolNeg, txtNomDimH, txtNomDimHPos, txtNomDimHNeg, 
           txtNomDimW, txtNomDimWPos, txtNomDimHNeg, txtTensileStrength, txtElongation, txtYieldStghMin, 
           txtYieldStghMax, txtBulging, txtInsThick1, txtInsThick2, txtInsThick3, txtProThick, txtEdgeProThick, 
           txtInterColThick} 

Dim integerBoxes() As TextBox = New TextBox() {txtPONbr, txtNbrWire, txtNbrDrum, txtDrumSets, txtWindInnerDia, txtPitch} 

Et voici l'un des endroits que je suis en train de boucler à travers les tableaux:

Private Function IsValidData() As Boolean 

    For Each box As TextBox In decimalBoxes 
     If Not IsDecimal(box) Then 
      Return False 
     End If 
    Next 

    For Each box As TextBox In integerBoxes 
     If Not IsInt32(box) Then 
      Return False 
     End If 
    Next 

    Return True 

End Function 

Dans les boucles, « boîte » est définie à rien, même Cependant, lorsque je définis un point d'arrêt en mode de débogage, je peux voir que tout ce qui se trouve dans mes tableaux est définitivement un textbox. Tout fonctionne bien quand je déplace les tableaux dans les fonctions que je les appelle, mais cela va à l'encontre du but de les déclarer au niveau de la classe. Je veux utiliser ces tableaux à plusieurs endroits sur mon formulaire. Une idée sur ce que je fais mal ici?

+1

Vous devez probablement ajouter les TB uniquement à la matrice après l'exécution du code du concepteur de formulaire et les créer. semble que ce code devrait jeter une exception. 'IsDecimal (box)' devrait probablement être 'IsDecimal (box.Text)' puisque vous voulez tester le contenu du TB – Plutonix

+0

Vous avez raison de les ajouter au tableau après le code du concepteur de formulaire. J'ai changé mon code pour déclarer le tableau au niveau de la classe, et assigner les texboxes au tableau dans mon événement frmTDSNew_Load. Si vous voulez faire une réponse, je l'accepterai. Merci! –

Répondre

1

Avec ce code:

Public Class frmTDSNew 

' Form level arrays to hold text boxes to fill and validate 
Dim decimalBoxes() As TextBox = New TextBox() {txtLenPerDrum, txtWeightPerDrum, 
      txtEnamThick, txtEnamTolPos, txtEnamTolNeg, 
      txtEpoxyThick, txtEpoxTolPos, txtEpoxTolNeg, txtNomDimH, 
      txtNomDimHPos, txtNomDimHNeg, 

Aucun des contrôles existent encore - le concepteur ne les a pas créer encore, de sorte que son mauvais placer pour les ajouter. Au moins le déplacer vers Sub New ou FormLoad

... ou de supprimer complètement:

Une autre façon de faire, est d'utiliser une liste (String) contenant les noms:

Private decList As New List(Of String) 
'... 

decList.Add("txtLenPerDrum") 
decList.Add("txtWeightPerDrum")  

puis à tester:

For n as Integer = 0 to decList.Count -1 
    If Not IsDecimal(Controls(decList(n)).Text) Then 
     Return False 
    End If 
Next n 

Vous pouvez aussi « automatiser » en ayant les commandes souhaitées « subscribe », ou s'ajouter à la liste:Remarque: HandleCreated est appelé la première fois que le contrôle est affiché. Par conséquent, si certains sont invisibles jusqu'à un certain moment, ils ne figureront pas dans la liste avant d'être affichés.

1

Vous devriez déclarerait un tableau comme celui-ci:

Dim decimalBoxes As TextBox() 
+1

Exactement. Je recevais toujours des erreurs après avoir réglé cela. Le commentaire de Plutonix m'a conduit à la réponse cependant. Merci! –

Questions connexes