1

我有一个 C# 应用程序,其中有几个具有相同名称的文本框,除了末尾的数字从 1 开始到 19。我希望使用 for 循环通过使用数组列表。在某些情况下,arrayList 中将没有 19 个项目,因此某些文本框将未填充。这是我正在尝试做的示例代码。这可能吗?

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

3 回答 3

4

所以你有一组要从上到下填写的文本框?那么是的,一个集合TextBox似乎很合适。

如果您将TextBox引用粘贴在数组或 a 中List<TextBox>- 我不会使用 an ArrayList,因为它被认为已弃用List<T>- 那么是的,您可以这样做:

TextBox[] regUKCNumTextBox = new [] 
    {
         yourTextBoxA,
         yourTextBoxB,
         ...
    };

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

于 2012-08-09T14:27:00.140 回答
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());
      }
   }

}

使用此代码,您试图找到ControlFormControls收藏的表格。然后你必须确保控件的TextBox类型。几时; 将它转换为 aTextBox并用它做你想做的事。在这种情况下; Text为属性赋值。

It would be more efficient to keep a collection of your TextBoxes like in the solution offered by James Michael Hare

于 2012-08-09T14:29:05.507 回答
1

Yikes; something doesn't seem quite right with the overall design there; but looking past that, here's a quick stab at some pseudo code that might work:

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];
}
于 2012-08-09T14:31:15.400 回答