在visual basic中,我希望能夠使用存儲在變量中的數字訪問按鈕的名稱。 例如,如果我有24個按鈕,它們都被命名爲'按鈕',其後面的數字爲1,2,3 ... 22,23,24。如果我想改變前八個按鈕中的文字,我會怎麼做。使用變量訪問按鈕名稱
這裏是我的例子來幫助說明我的意思:
For i = 1 to 8
Button(i).text = "Hello"
Next
在visual basic中,我希望能夠使用存儲在變量中的數字訪問按鈕的名稱。 例如,如果我有24個按鈕,它們都被命名爲'按鈕',其後面的數字爲1,2,3 ... 22,23,24。如果我想改變前八個按鈕中的文字,我會怎麼做。使用變量訪問按鈕名稱
這裏是我的例子來幫助說明我的意思:
For i = 1 to 8
Button(i).text = "Hello"
Next
For index As Integer = 1 To 8
CType(Me.Controls("Button" & index.ToString().Trim()),Button).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
或者
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)
將重複存儲在裏面的前8個項目yourButtonArray
我希望它有幫助。
提出的解決方案,如果按鈕沒有直接包含由窗體本身到目前爲止將會失敗。如果他們在不同的容器中呢?例如,您可以簡單地將「我」更改爲「面板1」,但如果按鈕分佈在多個容器多個容器上,則不起作用。
要使其工作,無論是按鍵位置,使用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
的可能的複製[如何創建VB .NET控件數組(HTTP:/ /stackoverflow.com/questions/5299435/how-to-create-control-arrays-in-vb-net) – Jaxedin
檢查[此答案](http://stackoverflow.com/a/41412984/4934172) –