我有一个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());
}
答案 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];
}