2015-01-15 86 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循環:

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

,因爲Visual Basic不會讓我將按鈕名稱的一部分替換爲變量。我被告知一段時間循環可以這樣實現:(while rs.Read = true)。但是我不知道如何在while循環中瀏覽所有的按鈕名稱。

回答

0

可以使用DirectCast到鑄文成一個按鈕

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]總是存在的,你可以這樣做:

​​
+1

我糾正了標籤在這個問題上,所以我也從你的答案中刪除了關於他們的評論。 – RubberDuck

+2

還有其他方法可以做到這一點谷歌.net找到控制。例如,如果這些控件位於它們自己的容器e.a面板中,則可以在MyPanel.Controls上執行foreach。 –

相關問題