Vb.net 在循环上创建具有不同名称的变量

Vb.net 在循环上创建具有不同名称的变量,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我不想在中创建一组变量,而,每个变量都有不同的名称 以下是我尝试过的: Dim asd As Integer = 1 While asd < 5 Dim picturebox +asd As New Picturebox End While Dim asd作为整数=1 asd

我不想在
中创建一组变量,而
,每个变量都有不同的名称

以下是我尝试过的:

 Dim asd As Integer = 1
    While asd < 5
        Dim picturebox +asd As New Picturebox
    End While
Dim asd作为整数=1
asd<5
暗显picturebox+asd作为新picturebox
结束时
我想要它创建Picturebox1 Picturebox2。。。以此类推,但“asd”变量不会求值,代码也不会工作。如何使用Visual Studio在循环中创建具有不同名称的变量?

为什么不使用


我过去所做的是:

For i = 0 to 5
    Dim t As New PictureBox()
    t.Name = "PictureBox" & i
    Me.Controls.Add(t)
Next
Dim picToChange = From r in Me.Controls Where Typeof(r) Is PictureBox AndAlso r.Name = "PictureBox1" Select r
If picToChange IsNot Nothing AndAlso picToChange.Any Then
    'Do Something
End If
这是一个非常基本的示例,您的
linq
可能比我使用的示例更具动态性,但您应该明白这一点。在本例中,我假设您只是将
PictureBoxes
放在表单上,如果不是这样,那么您将需要
linq
通过要添加控件的任何集合

编辑#1:

就事件而言,您需要手动添加处理程序。因此,您的代码将变成:

For i = 0 to 5
    Dim t As New PictureBox()
    t.Name = "PictureBox" & i
    AddHandler t.Click, AddressOf(FunctionToHandleClick)
    Me.Controls.Add(t)
Next
Dim picToChange = From r in Me.Controls Where Typeof(r) Is PictureBox AndAlso r.Name = "PictureBox1" Select r
If picToChange IsNot Nothing AndAlso picToChange.Any Then
    'Do Something
End If
函数ToHandleClick如下所示:

Private Sub FunctionToHandleClick(ByVal sender As Object, ByVal e As ClickEventArgs)
End Sub

为什么不使用数组呢
picturebox[3]=新建picturebox()
?将它们添加到
表单中可能是个好主意。控件
位于某个位置,而不仅仅是整体创建。现在是21世纪,我们有机器人狗和飞车,所以不需要使用老式的数组,如果需要将它们存储在控件集合之外的任何位置,请使用
列表(图片盒)
。@Proputix供参考:列表中的项实际上存储在(老式的)
数组中,我完全同意你的意见;)值得注意的是,在循环中给变量起的名字是不相关的。一旦循环完成,您就不能通过给定的名称引用变量,您需要在添加到的任何集合中找到它们,以便对它们进行任何操作。已编辑。我很傻,用C#语法发布了它。如果我需要创建的图片框的数量也是一个变量,那可能吗
dim pictureboxs(变量)作为Picturebox
循环中的代码可以减少到一行:
Me.Controls.Add(带有{.Name=“Picturebox”&i}的新Picturebox()
;)@Bjørn RogerKringsjå非常正确,尽管我试图尽可能明确,因为询问者对VB来说似乎是新的……是的,我只是认为这值得一提;)如果我需要
。在创建的picturebox上单击
事件,我应该怎么做<代码>处理t。单击给出一个error@user1938775发送方将是触发事件的picturebox。创建时给它起个好名字(“pictureBox1”不是),和/或使用.Tag属性,以便
Ctype(Sender,PictureBox).name
或.Tag为您提供所需的信息。
Private Sub FunctionToHandleClick(ByVal sender As Object, ByVal e As ClickEventArgs)
End Sub