动态添加的标签在运行时消失
本文关键字:运行时 消失 标签 添加 动态 | 更新日期: 2023-09-27 18:32:23
我以编程方式向表单添加标签,但它们消失了,除了最后一个。我相信给他们给定的位置是合适的。但是当第二个标签出现时,第一个标签消失,或者当第三个标签出现时,第二个标签消失。
这是我的代码:
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]);
}
此行导致数组中的每个位置都引用了您最初在循环外部创建的相同Label
,这意味着您所做的只是更改循环内相同Label
的位置和文本。
lenlab[i] = lab;
您看到的行为是由于您只能将特定控件添加到this.Controls
一次,因此效果是你会看到相同的标签更改位置。
下面是 Add()
方法的一部分,用于检查要添加的控件是否已具有父控件,如果有,则在将其添加到新控件之前将其从当前父控件中删除。因此,每次使用相同Label
调用this.Controls.Add()
时,它都会将其从Form
中删除,然后再次添加。
// Remove the new control from its old parent (if any)
if (value.parent != null) {
value.parent.Controls.Remove(value);
}
相反,请在for
循环中创建一个新Label
:
lenlab[i] = new Label();
有些控件可以帮助您布局控件,而无需每次都计算新位置。特别是,阅读 FlowLayoutPanel 和 TableLayoutPanel 类。
你在那里做的基本上是创建一个Label
,多次更改它,并将其多次附加到页面上。您最终在页面上看到的是添加一次标签的最新版本,这是预期行为。
如果要添加多个标签,则需要new
每个标签。