2015-01-15 3 views
1

У меня есть немного кода в моем проекте, который считывает данные из базы данных и присваивает их тексту на кнопках. В программе есть 25 кнопок в виде сетки. Нынешнее решение является грязным и имеет проблемы с пустыми данными.присвоение значений нескольким объектам в цикле for

Это текущее решение:

rs.Read() 
    Productbutton1.Text = (rs(0)) 
    rs.Read() 
    Productbutton2.Text = (rs(0)) 
    rs.Read() 
    Productbutton3.Text = (rs(0)) 
    rs.Read() 
    Productbutton4.Text = (rs(0)) 
    rs.Read() 
    Productbutton5.Text = (rs(0)) 
    rs.Read() 
    Productbutton6.Text = (rs(0)) 
    rs.Read() 
    Productbutton7.Text = (rs(0)) 
    rs.Read() 
    Productbutton8.Text = (rs(0)) 
    rs.Read() 
    Productbutton9.Text = (rs(0)) 
    rs.Read() 
    Productbutton10.Text = (rs(0)) 
    rs.Read() 
    Productbutton11.Text = (rs(0)) 
    rs.Read() 
    Productbutton12.Text = (rs(0)) 
    rs.Read() 
    Productbutton13.Text = (rs(0)) 
    rs.Read() 
    Productbutton14.Text = (rs(0)) 
    rs.Read() 
    Productbutton15.Text = (rs(0)) 
    rs.Read() 
    Productbutton16.Text = (rs(0)) 
    rs.Read() 
    Productbutton17.Text = (rs(0)) 
    rs.Read() 
    Productbutton18.Text = (rs(0)) 
    rs.Read() 
    Productbutton19.Text = (rs(0)) 
    rs.Read() 
    Productbutton20.Text = (rs(0)) 
    rs.Read() 
    Productbutton21.Text = (rs(0)) 
    rs.Read() 
    Productbutton22.Text = (rs(0)) 
    rs.Read() 
    Productbutton23.Text = (rs(0)) 
    rs.Read() 
    Productbutton24.Text = (rs(0)) 
    rs.Read() 
    Productbutton25.Text = (rs(0)) 

Проблема я столкнулся в том, что я не могу использовать для цикла в смысле:

For i = 1 To 25 
     rs.Read() 
     Productbutton(i).text = (rs(0)) 
    Next 

Поскольку Visual Basic не позволит мне замените часть имени кнопки для переменной. Мне сказали, что цикл while может быть реализован так: (while rs.Read = true). Однако я не знаю, как продвигаться по всем именам кнопок в цикле while.

ответ

0

Вы можете использовать DirectCast для Cast текста в кнопку

For i = 1 To 25 
    rs.Read() 
    dim newButton = DirectCast(Controls("Productbutton" & i.ToString()), Button) 
    newButton.text = (rs(0)) 
Next 
4

Предполагая, что вы используете VB.NET и предполагая Productbutton[1-25] всегда существуют, вы можете сделать это:

For i = 1 To 25 
    rs.Read() 
    ' Locate the button with the name on the form. 
    Dim btn As Button = Me.Controls.Find("Productbutton" & i, True) 
    btn.Text = rs(0) 
Next 
+1

Я скорректированного теги на вопрос, поэтому я также удалил комментарий о них из вашего ответа. – RubberDuck

+2

Есть другие способы сделать это. Например, если эти элементы управления были в своей собственной панели e.a, вы могли бы просто сделать foreach на MyPanel.Controls. –

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