Vb.net 使用变量访问按钮名称

Vb.net 使用变量访问按钮名称,vb.net,winforms,Vb.net,Winforms,在VisualBasic中,我希望能够使用存储在变量中的数字访问按钮的名称。 例如,如果我有24个按钮,它们都被命名为“按钮”,编号为1、2、3。。。22,23,24之后。如果我想更改前八个按钮中的文本,我将如何进行更改 以下是我的示例,以帮助说明我的意思: For i = 1 to 8 Button(i).text = "Hello" Next 使用LINQ,您就可以开始了: Dim yourButtonArray = yourForm.Controls.Of

在VisualBasic中,我希望能够使用存储在变量中的数字访问按钮的名称。 例如,如果我有24个按钮,它们都被命名为“按钮”,编号为1、2、3。。。22,23,24之后。如果我想更改前八个按钮中的文本,我将如何进行更改

以下是我的示例,以帮助说明我的意思:

    For i = 1 to 8
        Button(i).text = "Hello"
    Next

使用LINQ,您就可以开始了:

Dim yourButtonArray = yourForm.Controls.OfType(of Button).ToArray
' takes all controls whose Type is Button
For each button in yourButtonArray.Take(8)
    button.Text = "Hello"
Next

在任何情况下,.Take8都将迭代存储在ButtonArray中的前8项


我希望它能有所帮助。

如果表单本身没有直接包含按钮,那么目前提出的解决方案将失败。如果它们在不同的容器中呢?例如,您可以简单地将我更改为Panel1,但如果按钮分布在多个容器中,则这没有帮助

For index As Integer = 1 To 8
   CType(Me.Controls("Button" & index.ToString().Trim()),Button).Text = "Hello"
Next
要使其工作,无论按钮位置如何,请使用带有searchAllChildren选项的Controls.Find方法:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim ctlName As String
    Dim matches() As Control
    For i As Integer = 1 To 8
        ctlName = "Button" & i
        matches = Me.Controls.Find(ctlName, True)
        If matches.Length > 0 AndAlso TypeOf matches(0) Is Button Then
            Dim btn As Button = DirectCast(matches(0), Button)
            btn.Text = "Hello #" & i
        End If
    Next
End Sub
可能的支票副本
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim ctlName As String
    Dim matches() As Control
    For i As Integer = 1 To 8
        ctlName = "Button" & i
        matches = Me.Controls.Find(ctlName, True)
        If matches.Length > 0 AndAlso TypeOf matches(0) Is Button Then
            Dim btn As Button = DirectCast(matches(0), Button)
            btn.Text = "Hello #" & i
        End If
    Next
End Sub