我以编程方式向表单添加标签,但它们会消失,除了最后一个。我确信给他们的位置是合适的。但是当第二个标签出现时,首先消失,或者当第三个标签出现时,第二个标签消失。
这是我的代码:
Label[] lenlab = new Label[255];
Label lab = new Label();
lab.Font = new Font("Microsoft Sans Serif", 10, FontStyle.Bold);
lab.ForeColor = Color.White;
lab.BackColor = Color.Transparent;
lab.AutoSize = true;
lenlab[1] = lab;
lenlab[1].Location = new Point(50, panel1.Location.Y + panel1.Height + 20);
lenlab[1].Text = c[1];
this.Controls.Add(lenlab[1]);
for (int i = 2; i < c.Count; i++)
{
lenlab[i] = lab;
lenlab[i].Location = new Point(lenlab[i - 1].Location.X + lenlab[i -1].Width + 40, lenlab[i - 1].Location.Y);
lenlab[i].Text = " + " + c[i];
this.Controls.Add(lenlab[i]);
}
答案 0 :(得分:1)
这一行导致数组中的每个位置都引用了您在循环之外创建的同一Label
,这意味着您所做的只是改变<的位置和文本你的循环中有相同的 Label
。
lenlab[i] = lab;
您看到的行为是由于您只能将特定控件添加到this.Controls
一次,因此效果是您看到相同的标签发生了变化位置。
这是Add()
方法的一部分,用于检查您添加的控件是否已经存在父级,如果是,则将其从当前删除将父级添加到新父级之前的父级。因此,每当您使用相同的this.Controls.Add()
致电Label
时,它会将其从Form
中移除,然后再将其添加。
// Remove the new control from its old parent (if any)
if (value.parent != null) {
value.parent.Controls.Remove(value);
}
而是在Label
循环中创建一个新的for
:
lenlab[i] = new Label();
有些控件可以帮助您布局控件,而无需每次都计算新位置。特别是,请阅读FlowLayoutPanel和TableLayoutPanel类。
答案 1 :(得分:1)
你在做什么基本上是创建一个 Label
,多次更改,并将其多次附加到页面。你最终在页面上得到的是标签的最后一个版本,它被添加一次,这是预期的行为。
如果您想添加多个标签,则需要new
每个标签。