Sie können den Me.Controls(String)
Indexer verwenden. Sie können den Namen (als String) des Steuerelements angeben, auf das Sie zugreifen möchten. Auf diese Weise können Sie dynamisch auf ein Bildfeld zugreifen, indem Sie die Zeichenfolge "PictureBox" mit einer Zahl verketten.
Dim TargetPictureBox As PictureBox = TryCast(Me.Controls("PictureBox" & CurrentNumber), PictureBox)
'Verifying that the control exists and that it was indeed a PictureBox.
If TargetPictureBox IsNot Nothing Then
TargetPictureBox.BackColor = Color.Red
End If
Alternativ Verarbeitungsleistung zu sparen, indem jedes Mal Schleife durch die gesamte Steuer Sammlung vermeiden Sie die OfType()
extension auf Me.Controls
nennen kann, ist das Ergebnis in einem Array Speicherung durch die Kontrollen die Namen sortiert. Auf diese Weise müsste die Kontrollsammlung nur einmal durchlaufen werden.
'Class level - outside any methods (subs or functions).
Dim PictureBoxes As PictureBox() = Nothing
'Doesn't necessarily have to be done in a button, it's just an example.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If PictureBoxes Is Nothing Then
PictureBoxes = Me.Controls.OfType(Of PictureBox).OrderBy(Function(p As PictureBox) p.Name).ToArray()
End If
'NOTE: CurrentNumber - 1 is necessary when using an array!
PictureBoxes(CurrentNumber - 1).BackColor = Color.Red
End Sub
HINWEIS: Diese Lösung wird nur funktionieren, wenn alle Bildrahmen genannt werden „PictureBox1“, „PictureBox2“ usw. Wenn Sie plötzlich eine Nummer („PictureBox3“, „PictureBox5“ überspringen " PictureBox6 ") dann PictureBoxes(CurrentNumber - 1)
für CurrentNumber = 5
würde PictureBox6
anstatt PictureBox5
zurückgeben.
Bitte ausführlicher über Ihre Fragen, dh mehr Kontext geben, wie die Sprache angeben, die Sie verwenden in die Frage. –
Kontext hinzugefügt - Ich verwende Visual Basic. –