我有以下代码。在表单加载时,我想创建多个标签,第一个应该在位置(20,0),第二个应该在(40,0)上,直到最后一个标签。但程序只显示第一个标签,我的意思是标签0,这就是全部 如何解决这个问题?
private void Form1_Load(object sender, EventArgs e)
{
Label[] nmr = new Label[10];
for(int i=0; i<10; i++)
{
nmr[i] = new Label();
nmr[i].Text = "label " + i;
nmr[i].Left += 20;
this.Controls.Add(nmr[i]);
}
}
答案 0 :(得分:2)
private void Form3_Load(object sender, EventArgs e)
{
Label[] nmr = new Label[10];
for (int i = 0; i < 10; i++)
{
nmr[i] = new Label();
nmr[i].Text = "label " + i;
nmr[i].Location = new Point(0, 25 * i);
this.Controls.Add(nmr[i]);
}
this.Height = this.Height + (25 * nmr.Count());
}
您还需要调整表单大小, 这段代码可以帮到你,
答案 1 :(得分:2)
nmr[i].Left = 20 * (i+1);
将计算您想要的距离。但是,您只会看到一个标签,因为第一个标签太长。所以你必须调整它的大小:
nmr[i].Size = new Size(40, 15);
然后你会看到20个像素太小而不是距离;标签将重叠
答案 2 :(得分:1)
每次迭代都应该将Left
值增加20。我也不明白为什么要填充数组,因为您只需将标签添加到Controls
集合中。试试这个:
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i < 11; i++)
{
var label = new Label();
label.Text = "label " + i;
label.Left += 20 * i;
this.Controls.Add(label);
}
}
答案 3 :(得分:1)
在你的循环中,替换
nmr[i].Left +=20;
与
nmr[i].Left = 20 * (i + 1);
答案 4 :(得分:1)
实际上,您没有编辑正确的属性。正确的是control.Location
,Point
,其属性为x和y。
要为每个循环添加20,你实际上需要像(20 * (i+1))
有效的示例代码:
private void Form1_Load(object sender, EventArgs e)
{
Label[] nmr = new Label[10];
for (int i = 0; i < 10; i++)
{
nmr[i] = new Label();
nmr[i].Text = "label " + i;
nmr[i].Location = new Point(0, (20 * (i+1)));
this.Controls.Add(nmr[i]);
}
}
编辑:工作20点。好像标签不会显示正确。也许试试30pt?
答案 5 :(得分:0)
尝试使用 Linq 按顺序生成Label
s:
using System.Linq;
...
private void Form1_Load(object sender, EventArgs e) {
Label[] nmr = Enumerable
.Range(0, 10)
.Select(i => new Label() {
Text = $"label {i}",
Left = 20 + i * 20, // <- please, notice Left computation
Parent = this, })
.ToArray();
}