我有一堆名为“panel_1”,panel_2“等的变量,我希望使用循环更改所有控件的高度,而不是命名每个。
目前我使用
Dim panel_1 as new panel
Dim panel_2 as new panel
Dim panel_3 as new panel
panel_1.height = 100
panel_2.height = 100
panel_3.height = 100
我怎么能这样做?
for x as integer = 0 to 1000
panel_[x].height = 100
next
感谢。
答案 0 :(得分:3)
如果这是一个WinForm项目,则所有控件都包含在表单的Controls
集合中,该集合可通过名称访问,如下所示:
For x As Integer = 0 to 1000
Me.Controls("panel_" & i.ToString()).height = 100
Next
但是,请注意,表单的Controls
集合仅包含直接添加到表单的控件。如果您有另一个容器控件内的控件,则需要通过该容器的Controls
属性访问它们,例如:
For x As Integer = 0 to 1000
MyContainer.Controls("panel_" & i.ToString()).height = 100
Next
但是,通过字符串名称访问控件可能是您希望避免的,因为它可能会导致意外后果。正如其他人所建议的那样,最好将面板列表存储在List(Of Panel)变量中,该变量仅包含调整大小逻辑适用的特定面板控件,如下所示:
Dim autoResizePanels As New List(Of Panel)({panel1, panel2, panel3})
然后,您可以轻松地遍历它们,如下所示:
For Each i As Panel In autoResizePanels
i.height = 100
Next
答案 1 :(得分:0)
你无法在VB.NET中进行这种变量访问。
不是定义三个变量,而是定义数组或列表
Dim panels as new List(Of Panel)
panels.Add(new Panel())
panels.Add(new Panel())
for x as integer = 0 to 1000
Dim p as new Panel
p.height = 100
panels.Add(p)
panels(x).width = 150
next
答案 2 :(得分:0)
我首选的方法是(通常)存储控件名称:
Dim panels as new List(Of String)
For n As integer = 0 to X
Dim pnl As New Panel
'... set values
panels.Add(pnl.Name)
Controls.Add(pnl)
Next n
参考一个:
Controls(panels(IndexofOneYouWant).Height = 100
由于您动态创建了控件,因此有时也可能会删除它们。在这种情况下,当你去除一个时,List没有持有对它们的引用。如果它们在创建后仍然存在,则List(of Panel)
更容易,更好。
答案 3 :(得分:0)
只需循环显示所需的面板数量(在您的情况下为3)&在每次迭代时创建一个新面板,设置高度和宽度。以编程方式命名。
For i = 0 To 3
Dim panel As New Panel
panel.Name = "panel" & i
panel.Height = 100
Next