假设我在页面加载中有这个:
Label lblc = new Label();
for (int i = 1; i <= 10; i++)
{
lblc.Text = i.ToString();
this.Controls.Add(lblc);
}
如何在运行时操作这些控件?
我想:
设置/获取文字。
引用特定控件,在本例中为Label。
答案 0 :(得分:4)
如果您知道将拥有多少标签,请使用数组
Label[] lblc = new Label[10];
for (int i = 0; i < 10; i++)
{
lblc[i] = new Label() { Text = (i + 1).ToString() };
this.Controls.Add(lblc[i]);
}
然后,您将使用lblc [0]引用文本框1,使用lblc [1]引用文本框2,依此类推。或者,如果你不知道你将拥有多少个标签,你总是可以使用这样的东西。
List<Label> lblc = new List<Label>();
for (int i = 0; i < 10; i++)
{
lblc.Add(new Label() { Text = (i + 1).ToString() });
this.Controls.Add(lblc[i]);
}
您以与数组相同的方式引用它,只需确保在方法外声明List或数组,这样您就可以在整个程序中使用范围。
假设您想要完成TextBoxes以及标签,然后通过相同的列表跟踪您可以执行的所有控件,请参阅此示例,其中每个Label都有自己的宠物TextBox
List<Control> controlList = new List<Control>();
for (int i = 0; i < 10; i++)
{
control.Add(new Label() { Text = control.Count.ToString() });
this.Controls.Add(control[control.Count - 1]);
control.Add(new TextBox() { Text = control.Count.ToString() });
this.Controls.Add(control[control.Count - 1]);
}
祝你好运!任何其他需要添加的东西都只是问。
答案 1 :(得分:1)
最好设置Name
,然后在控件
for (int i = 1; i <= 10; i++)
{
Label lblc = new Label();
lblc.Name = "lbl_"+i.ToString();
lblc.Text = i.ToString();
this.Controls.Add(lblc);
}
当:
public void SetTextOnControlName(string name, string newText)
{
var ctrl = Controls.First(c => c.Name == name);
ctrl.Text = newTExt;
}
用法:
SetTextOnControlName("lbl_2", "yeah :D new text is awsome");
答案 2 :(得分:1)
您的代码只创建一个控件。因为,标签对象创建在循环外部。你可以使用如下,
for (int i = 1; i <= 10; i++)
{
Label lblc = new Label();
lblc.Text = i.ToString();
lblc.Name = "Test" + i.ToString(); //Name used to differentiate the control from others.
this.Controls.Add(lblc);
}
//To Enumerate added controls
foreach(Label lbl in this.Controls.OfType<Label>())
{
.....
.....
}