在visual basic中,我希望能够使用存储在变量中的数字来访问按钮的名称。 例如,如果我有24个按钮全部命名为'按钮'在它之后的数字1,2,3 ... 22,23,24。如果我想更改前八个按钮中的文本,我该怎么做。
这是我帮助展示我的意思的例子:
For i = 1 to 8
Button(i).text = "Hello"
Next
答案 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
我希望它有所帮助。
答案 2 :(得分:0)
For index As Integer = 1 To 8
CType(Me.Controls("Button" & index.ToString().Trim()),Button).Text = "Hello"
Next