2013-08-22 84 views
1

我試了下面的代碼來指定MaskedTextBox控件列表中的from到msklist。但是,即使在執行下面顯示的代碼之後,索引值仍然爲0。我的表單中有30個MaskedTextBox控件。指定清單(MaskedTextBox)與清單MaskedTextBox控件的形式

Private msklist As New List(Of MaskedTextBox) 
Private msk() As MaskedTextBox 
For Each ctrl In Me.Controls 
    If TypeOf ctrl Is MaskedTextBox Then 
     msklist.Add(ctrl) 
    End If 
Next 

MsgBox(msklist.Count) 
ReDim msk(msklist.Count - 1) 

msk = msklist.ToArray 

    For i = 0 To 29 Step 1 
     query = "SELECT * FROM allotment_table WHERE [email protected]" 
     cmd.Parameters.AddWithValue("@seat", seat1(i)) 
       cmd = New SqlCommand(query, con) 
     con.Open() 
     re = cmd.ExecuteReader 

     re.Read() 
     msk(i).Text = re("regno") 
     con.Close() 
    Next 

我希望使用與數組指定文本控件Text屬性循環msk

我需要一些建議

+0

一個更簡單方法來做到這一點(假設你使用的是框架的最新版本)將會是'For Each ctrl In Me.Controls.OfType(Of MaskedTextBox)... Next' –

+0

我需要按順序執行此操作。有了索引值,我需要做更多的操作,例如**從數據庫中**數據**我會更新問題 –

+0

你有沒有在'msklist.Add(ctrl)'上放置一個斷點並確認它將30個項目添加到列表? –

回答

1

試試這個:

Private msklist As New List(Of MaskedTextBox) 

' Loop through all controls in form 
For Each ctrl As Control In Me.Controls 
    If TypeOf ctrl Is Panel Then 
     ' Loop through each of the controls in the Panel 
     For Each panelCtrl As Control In ctrl.Controls 
      If TypeOf panelCtrl Is MaskedTextBox Then 
       msklist.Add(panelCtrl) 
      End If 
     Next 
    End If 
Next 

MsgBox(msklist.Count) 

' Get the text value once and apply it to each text box 
query = "SELECT * FROM allotment_table" 
cmd = New SqlCommand(query, con) 
con.Open() 
re = cmd.ExecuteReader 
re.Read() 
Dim textValue As String = re("regno") 
con.Close() 

' Loop through the list of masked text boxes and apply the text value to each 
For Each mskTextBox As MaskedTextBox In msklist 
    mskTextBox.Text = textValue 
Next 
+0

沒有錯誤,但價值沒有得到分配給控件**仍然列表大小爲0 ** –

+0

好吧,你可以調試行'msklist.Add(ctrl)',當它實際命中時,步進一行,看看列表的計數是否增加1? –

+0

我放了一個制動點,但沒有停頓。一次也沒有,0 –