使用变量访问按钮名称

时间:2017-01-09 21:19:35

标签: vb.net winforms

在visual basic中,我希望能够使用存储在变量中的数字来访问按钮的名称。 例如,如果我有24个按钮全部命名为'按钮'在它之后的数字1,2,3 ... 22,23,24。如果我想更改前八个按钮中的文本,我该怎么做。

这是我帮助展示我的意思的例子:

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

3 个答案:

答案 0 :(得分:1)

如果按钮不是由表单本身直接包含,那么到目前为止提出的解决方案将失败。如果他们在不同的容器中怎么办?例如,您可以简单地将“我”更改为“Panel1”,但如果按钮分布在多个容器中,则无效。

要使其工作,无论按钮位置如何,请使用Controls.Find()方法和“searchAllChildren”选项:

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

答案 1 :(得分:0)

使用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

Dim yourButtonArray = yourForm.Controls.Cast(of Control).Where(
    Function(b) b.Name.StartsWith("Button")
    ).ToArray
' takes all controls whose name starts with "Button" regardless of its type
For each button in yourButtonArray.Take(8)
    button.Text = "Hello"
Next

在任何情况下,.Take(8)都会对yourButtonArray

中存储的前8个项进行迭代

我希望它有所帮助。

答案 2 :(得分:0)

For index As Integer = 1 To 8
   CType(Me.Controls("Button" & index.ToString().Trim()),Button).Text = "Hello"
Next