2013-08-22 2 views
1

Я попробовал следующий код, чтобы назначить список из MaskedTextBox элементов управления из списка в список 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

Более простой способ сделать это (при условии, что вы используете последнюю версию фреймворка) будет «Для каждого 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

Хорошо, вы можете отлаживать line 'msklist.Add (ctrl)', когда он на самом деле попадает, перейдите на одну строку и посмотрите, увеличивается ли счет списка на единицу или нет? –

+0

Я положил brakepoint, но он не остановился. Даже не один раз и не 0 –

Смежные вопросы