在For循环C#中将int追加到字符串或文本框名称的末尾

时间:2012-08-09 14:23:40

标签: c# string for-loop

我有一个C#应用程序,其中有几个具有相同名称的文本框,除了最后一个从1开始并转到19的数字。我希望使用for循环动态地向这些文本框添加值通过使用arraylist。有些情况下,arrayList中不会有19个项目,因此某些文本框将被填充。这是我尝试做的示例代码。这可能吗?

  for (int count = 0; count < dogList.Count; count++)
        {
            regUKCNumTextBox[count+1].Text=(dogList[count].Attributes["id"].Value.ToString());
        }

3 个答案:

答案 0 :(得分:4)

所以你有一组从上到下填写的文本框?然后是的,TextBox的集合似乎是合适的。

如果您将TextBox个引用放在数组或List<TextBox>中 - 我就不会使用ArrayList,因为它被视为已弃用而赞成{ {1}} - 然后是的,你可以这样做:

List<T>

然后是的,你的逻辑是可能的,你也可以通过它的名称查询控件,虽然在运行时会更重 - 所以这是一个权衡。是的,在此解决方案中,您必须设置一个集合来保存文本框引用,但它会更高效。

答案 1 :(得分:2)

试试这个:

(顺便说一下,我假设你使用WinForms)

for (int count = 0; count < dogList.Count; count++)
{
   object foundTextBox = this.Controls.Find("nameofTextBoxes" + [count+1]);

   if (foundTextBox != null)
   {
      if (foundTextBox is TextBox)
      {
         ((TextBox)foundTextBox).Text=(dogList[count].Attributes["id"].Value.ToString());
      }
   }

}

使用此代码,您尝试在Control Form集合中找到Controls表单。然后你必须确保控件属于TextBox类型。几时;将它投射到TextBox并用它做你想做的事。在这种情况下;为Text属性分配值。

在James Michael Hare提供的解决方案中保留TextBox es的集合会更有效率

答案 2 :(得分:1)

让人惊讶;那里的整体设计似乎不太合适;但是看过去,这里有一些可能有效的伪代码:

for (int count = 0; count < dogList.Count; count++)
{
    var stringName = string.Format("myTextBoxName{0}", count);
    var ctrl = FindControl(stringName);
    if(ctrl == null) continue;
    ctrl.Text = dogList[count];
}