如何在循环中增加对象名称?

How to increase object name in a loop?

我有 1600 textboxes.I 想要这样的东西 :

Textbox1.Text="1"
Textbox2.Text="2"
Textbox3.Text="3"
Textbox4.Text="4"
...

我知道这行不通,但我需要这样的循环:

For i as integer = 0 to 1600  
(textbox+i).text=i  
Next  

我找不到关于 this.I 的任何信息 不知道这是 possible.Any 的想法吗?

For i as integer = 0 to 1600  
   CType(Me.Controls("Textbox" + i.ToString()), TextBox).Text = i.ToString()
Next 

希望这会奏效。

首先,让我们枚举所有的文本框:

var textboxes = this.Controls.OfType<TextBox>()
                             .ToArray();

现在我们有了文本框,让我们遍历它们并设置它们的编号:

for(int i = 0; i < textboxes.Count(); i++)
{
  var textbox = textboxes[i];
  textbox.Text = i.ToString();
}

如果您想从预定义的值范围开始循环,那么这应该可以解决问题:

For i = 1 to 1600
    Dim txt As TextBox = TryCast(Me.Controls("TextBox" & i.ToString), TextBox)
    If txt IsNot Nothing
        txt.Text = i.ToString()
    End If
Next

只是为了添加另一个选项(虽然我不推荐它 - 它很慢!!!!)您可以使用 Reflection 在循环中按名称获取它们。

例如:

For tb As Integer = 1 To 1600
    Dim textBox As TextBox = GetTextBoxByReflection("TextBox" & tb.ToString())
    textBox.Text = tb.ToString()
Next

另见 Getting variable by name in C#

您还可以循环所有控件...

    Dim tb As TextBox
    For Each ctrl As Control In form1.Controls
        If ctrl.GetType.ToString = GetType(TextBox).ToString Then
            tb = CType(ctrl, TextBox)
            tb.Text = ctrl.ID.Substring(7)
        End If
    Next