2014-05-07 88 views
0

我在表單類級別有幾個文本框數組。當我試圖循環遍歷這些數組,每個循環,我的循環變量值是'沒有'。這裏是我的表單級別陣列:類級別控制數組

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} 

這裏是我通過陣列試圖環路的地方之一:

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 

在循環,「盒子」被設置爲無,甚至儘管當我在調試模式下設置斷點時,我可以看到數組中的所有內容都是文本框。當我將數組移動到我稱之爲的函數內時,一切正常,但是這違背了在課堂級聲明它們的目的。我想在我的表單的幾個地方使用這些數組。任何想法我在這裏做錯了嗎?

+1

您應該只在表單設計器代碼運行並將其創建後纔將TB添加到數組中。看起來像代碼應該拋出一個異常。由於您想測試TB內容,所以'IsDecimal(box)'應該可以是'IsDecimal(box.Text)' – Plutonix

+0

您正準備在表單設計器代碼之後將它們添加到數組中。我更改了我的代碼以在類級別聲明數組,並將texboxes分配給我的frmTDSNew_Load事件中的數組。如果你想讓這個答案我會接受。謝謝! –

回答

1

有了這個代碼:

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, 

控件的無尚不存在 - 設計師並沒有創建它們還,所以它的錯放置它們。至少它移動到Sub NewFormLoad

...或者乾脆刪除它:

另一種方式來做到這一點,是使用(字符串)的列表包含名稱:

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

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

然後進行測試:

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

您也可以通過具有期望的控制,「訂閱」,「自動」,或將自己添加到列表:

Private Sub TextBox1_HandleCreated(sender As Object, e As EventArgs) 
     Handles TextBox1.HandleCreated 

    myList.Add(TextBox1.Name) 

End Sub 

注:HandleCreated在被稱爲第一次顯示的控制,所以如果有一些是不可見的,直到一定的時間,他們不會出現在列表中,直到所示。

1

你應該聲明一個這樣的數組:

Dim decimalBoxes As TextBox() 
+1

你是對的。修復這個後,我仍然得到錯誤。然而,Plutonix的評論讓我回答了答案。謝謝! –