2017-01-09 15 views
0

In Visual Basic möchte ich auf den Namen einer Schaltfläche zugreifen können, indem ich die in einer Variablen gespeicherte Nummer verwende. Zum Beispiel, wenn ich 24 Tasten habe, die alle 'Button' mit den Nummern 1, 2, 3 ... 22, 23, 24 danach benannt sind. Wenn ich dann den Text in den ersten acht Tasten ändern möchte, wie würde ich das tun.Zugriff auf Schaltflächennamen mit Variablen

Hier ist mein Beispiel zu zeigen, zu helfen, was ich meine:

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

Mögliches Duplikat (http [Wie Steuerung Arrays in VB .NET erstellen]://stackoverflow.com/questions/5299435/how-to-create-control-arrays-in-vb-net) – Jaxedin

+0

Überprüfen Sie [diese Antwort] (http://stackoverflow.com/a/41412984/4934172) –

Antwort

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

Verwenden von LINQ und du bist gut zu gehen:

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 

Oder

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 

In jedem Fall .Take(8) wird auf die ersten 8 Elemente, die in yourButtonArray

gespeichert sind, iterieren

Ich hoffe es hilft.

1

Die vorgeschlagenen Lösungen bisher fehl, wenn die Tasten sind nicht direkt sich durch das Formblatt. Was ist, wenn sie in einem anderen Container sind? Sie könnten zum Beispiel einfach "Ich" in "Panel1" ändern, aber das hilft nicht, wenn die Buttons über mehrere Container verteilt sind.

Um es unabhängig von den Buttons Stellen zu machen, das Verwenden die Controls.Find() Methode mit der "searchAllChildren" Option:

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 
Verwandte Themen