在vb.net中如何在变量名中使用变量

时间:2014-01-10 15:47:18

标签: vb.net variables

我有一堆名为“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

感谢。

4 个答案:

答案 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