2

假设我有 5 个 texbox:

 textbox1
 textbox2
 textbox3
 textbox4
 textbox5

我想在每个中写一些东西。有没有办法用循环来做到这一点?我在想一些看起来像的东西:

for (int i = 1; i < 6; i++)
{
    textbox[i].Text = i.ToString();   
}

所以我会在每个文本框中得到一个数字。或者有没有办法拥有一个文本框数组?

4

4 回答 4

4

考虑使用this.Controls.OfType<TextBox>,它将为您提供一个包含表单上所有TextBoxes 的列表。

您也可以通过名称访问它们this.Controls["textbox" + i]。( http://msdn.microsoft.com/en-us/library/s1865435.aspx )

于 2013-04-27T16:27:53.010 回答
0
List<Textbox> list = new List<Textbox>() {textbox1, textbox2, textbox3, textbox4, textbox5};
int i = 1;
foreach (var item in list)
{
        item.Text = i.ToString();
        i++;
}

如果这 5 个文本框是你在这个表单中的所有文本框,你也可以使用;

int i = 1;
foreach(var item in this.Controls.OfType<TextBox>())
{
       item.Text = i.ToString();
       i++;
}
于 2013-04-27T16:31:20.260 回答
0

多种选择:

  • 如果您的控件在同一个容器中(就像在同一个面板中):使用this.Controls.OfType<TextBox>csharpler 说的。
  • 如果您的控件位于各种容器中(例如在行中的表格中),您可以选择两个选项:

静态选项

创建一个静态数组:

TextBox[] textboxes = new[] { textbox1, textbox2, textbox3, textbox4, ... };
for (int i=0; i < textBoxes.Length; i++)
    textboxes[i].text = (i + 1).toString();   

动态选项:

static public SetTextBoxIndex(ControlCollection controls, ref int index)
{
    foreach(Control c in controls)
    {
        TextBox textbox = c as TextBox;
        if (textbox != null)
            textbox.Text =(++index).ToString();
        else
            SetTextBoxIndex(c.Controls, ref index);
    }
}

// Somewhere on your form:
int index = 0;
SetTextBoxIndex(this.Controls, ref index);
于 2013-04-27T16:39:10.600 回答
0

创建所需大小的文本框数组和对其的文本框引用。在你的情况下。

TextBox[] textBoxes = new TextBox[5];
textboxes[0] = textbox1;
textboxes[1] = textbox2;
textboxes[2] = textbox3;
textboxes[3] = textbox4;
textboxes[4] = textbox5;

for (int i = 1; i < 6; i++)
{
    textbox[i].Text = i.ToString();
}

希望这会有所帮助。

于 2013-04-27T16:44:30.983 回答