2

假设我在页面加载中有这个:

Label lblc = new Label();

for (int i = 1; i <= 10; i++)
{
    lblc.Text = i.ToString();
    this.Controls.Add(lblc);
}

如何在运行时操作这些控件中的每一个?

我想要:

  • 设置/获取他们的文本。

  • 引用特定控件,在本例中为 Label。

4

3 回答 3

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 和 Labels,然后跟踪您可以通过同一个列表执行的所有控件,以这个示例为例,其中每个 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]);
        }

祝你好运!任何其他需要添加的只是问。

于 2013-06-06T08:46:31.540 回答
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");
于 2013-06-06T08:46:12.980 回答
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>())
{
    .....
    .....
}
于 2013-06-06T08:46:53.910 回答