Vb.net 使用变量访问按钮名称
在VisualBasic中,我希望能够使用存储在变量中的数字访问按钮的名称。 例如,如果我有24个按钮,它们都被命名为“按钮”,编号为1、2、3。。。22,23,24之后。如果我想更改前八个按钮中的文本,我将如何进行更改 以下是我的示例,以帮助说明我的意思: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
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