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

时间:2015-09-22 13:43:20

标签: vb.net loops object names

我有1600个文本框。我想要这样的东西:

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

我知道这不起作用,但我需要一个这样的循环:

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

我找不到任何关于这件事。我不知道这是否可能。任何想法?

5 个答案:

答案 0 :(得分:3)

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

希望这会奏效。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

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

e.g:

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#

答案 4 :(得分:0)

你也可以循环所有控件......

    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