我正在使用VS 2012(vb.net),我有一个带有flowLayoutPanel的表单,该表单包含未知数量的按钮。为了简单起见,基本上,当表单加载时,我根据一个标准从表中获取项目,然后使用For ... Next块将每个项目的按钮添加到flowLayoutPanel。因此,如果我找到5个项目,我添加5个按钮,所有命名都不同,但问题是它们似乎堆积在一起而不是很好地排队。当我使用按钮一个接一个地添加项目时它工作正常,但当我使用For ... Next块时,它不起作用。我在添加每个按钮后尝试刷新flowLayoutPanel,我试图设置每个新按钮相对于前一个按钮位置的位置,但它仍然可以工作。 我已经研究了一个多星期了,而且那里有很多东西,但没有具体处理这个问题。
感谢您的帮助。
这是我的代码的相关部分:
`尝试 如果conn.State<> ConnectionState.Open然后 conn.Open() 结束如果
sql = "SELECT ItemCode, Description, NormalPrice FROM items WHERE items.Class = 'ICE CREAM'"
cmd = New MySqlCommand(sql, conn)
da.SelectCommand = cmd
'fill dataset
da.Fill(ds, "items")
rowscount = ds.Tables("items").Rows.Count
If rowscount > 0 Then 'there are records so go ahead
Dim ID As Integer
Dim desc As String
Dim newbutton As New Button
Dim newCode As New TextBox
For i As Integer = 0 To rowscount - 1
ID = ds.Tables("items").Rows(i).Item("ItemCode")
desc = ds.Tables("items").Rows(i).Item("Description")
newCode.Name = "mnuCode" & i
newCode.Text = ID
newCode.Visible = False
Me.Controls.Add(newCode)
newbutton.Name = "mnuButton" & i
newbutton.Text = desc
newbutton.Size = New Size(150, 100)
newbutton.BackColor = Color.Orange
newbutton.ForeColor = Color.White
newbutton.Font = New Font("Arial", 16, FontStyle.Bold)
newbutton.TextAlign = ContentAlignment.MiddleCenter
newbutton.Text = Regex.Unescape(desc)
newbutton.Top = (150 + (i * 100))
fPanel.Refresh()
AddHandler newbutton.Click, AddressOf ButtonClicked
fPanel.Controls.Add(newbutton)
Next
End If
ds.Reset()
conn.Close()
Catch ex As MySqlException
Finally
conn.Dispose()
End Try`
答案 0 :(得分:0)
您没有创建多个按钮。您只需一遍又一遍地在同一个按钮上更改属性。由于Button
是 reference type ,因此每次需要新的对象实例时都需要调用New
例如,而不是:
Dim newbutton As New Button
For i As Integer = 0 To rowscount - 1
' ...
fPanel.Controls.Add(newbutton)
Next
这样做:
For i As Integer = 0 To rowscount - 1
Dim newbutton As New Button
' ...
fPanel.Controls.Add(newbutton)
Next
或者:
Dim newbutton As Button = Nothing
For i As Integer = 0 To rowscount - 1
newbutton = New Button
' ...
fPanel.Controls.Add(newbutton)
Next