2017-01-09 7 views
0

ビジュアルベーシックでは、変数に格納されている番号を使用してボタンの名前にアクセスできるようにします。 たとえば、24個のボタンの名前がす​​べて「ボタン」であり、番号の後に1,2,3 ... 22,23,24の番号が付いているとします。最初の8つのボタンのテキストを変更したい場合は、どうすればいいでしょうか。 、いずれの場合においても変数を使用してボタン名にアクセスする

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 

:ここ

は、私が何を意味するかを示して助けるために私の例です:

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

[VB .NETでコントロール配列を作成する方法]の可能性のある重複します(http:/ /stackoverflow.com/questions/5299435/how-to-create-control-arrays-in-vb-net) – Jaxedin

+0

[この回答を確認](http://stackoverflow.com/a/41412984/4934172) –

答えて

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

使用LINQ、あなたが行ってもいいです.Take(8)は、最初に格納された8つのアイテムを繰り返します。yourButtonArray

私はそれが助けてくれることを願っています。ボタンがは直接フォーム自体によって含まれていない場合

1

提案されたソリューションは、これまで失敗します。彼らが別の容器に入っていたら?たとえば、「Me」を「Panel1」に簡単に変更することはできますが、ボタンが複数のコンテナにまたがって広がっていればそれは役に立ちません。

それを動作させるためには、関係なく、ボタンの位置を、「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 
関連する問題