从数组创建标签

时间:2011-02-15 13:33:28

标签: c# winforms arrays label

我想基于数组创建标签,但我总是只获得一个标签。

private void button1_Click(object sender, EventArgs e)
{
    Debug.WriteLine(hardrive.GetHardDriveName.Count);
    Label[] lblHDDName = new Label[hardrive.GetHardDriveName.Count];

    for (int i = 0; i < hardrive.GetHardDriveName.Count; i++)
    {
        int x = 10;
        int y = 10;

        lblHDDName[i] = new Label();
        lblHDDName[i].Location = new System.Drawing.Point(x, y);
        lblHDDName[i].Text = "Test";
        groupBoxHDD.Controls.Add(lblHDDName[i]);

        y += 10;
    }
}

调试

Debug.WriteLine(hardrive.GetHardDriveName.Count);

显示数组中的两个项目。

问题是在GroupBox中只有一个标签而不是两个。

6 个答案:

答案 0 :(得分:5)

您的y变量在for循环中定义,而不是在外部。因此,对于循环的每次执行,您将其初始化为10并在System.Drawing.Point中使用它。如果要跟踪循环结束时的增量,必须在for循环之前声明并初始化y

int y = 10;
for (int i = 0; i < ...; i++)
{
   // use y
   ...

   // increment it
   y += 10;
}

答案 1 :(得分:1)

您在循环的每次迭代开始时将y重置为10.

将x和y的声明移到循环之外。

这样:

for (int i = 0; i < hardrive.GetHardDriveName.Count; i++)
{
    int x = 10;
    int y = 10;
    ....

应该是:

int x = 10;
int y = 10;
for (int i = 0; i < hardrive.GetHardDriveName.Count; i++)
{    
    ....

答案 2 :(得分:1)

不,你正在创造所有正确的标签 - 但他们都有相同的位置(10,10)。如果你想看到不止一个,你需要将它们放在不同的地方:)要么在循环外声明y,要么只使用:

lblHDDName[i].Location = new Point(10, i * 10 + 10);

您可能希望查看某些描述的自动排列控制,而不是对位置进行硬编码。

此外,看起来你根本不需要标签数组 - 之后你就不再使用它们了。例如,您可以:

private void button1_Click(object sender, EventArgs e)
{
    for (int i = 0; i < hardrive.GetHardDriveName.Count; i++)
    {
        // Assuming you're using C# 3 or higher
        Label label = new Label {
            Location = new Point(10, i * 10 + 1),
            Text = "test"
        };
        groupBoxHDD.Controls.Add(label);
    }
}

甚至:

private void button1_Click(object sender, EventArgs e)
{
    for (int i = 0; i < hardrive.GetHardDriveName.Count; i++)
    {
        groupBoxHDD.Controls.Add(new Label {
            Location = new Point(10, i * 10 + 1),
            Text = "test"
        });
    }
}

答案 3 :(得分:1)

移动

int x = 10;
int y = 10;

out for for for循环

答案 4 :(得分:1)

您遇到的一个问题是xy声明在循环内部,因此y始终 10 即使您添加10在循环结束时它。标签将始终处于相同位置。要在for循环之外修复此移动int y = 10。你也应该在那里移动int x = 10

答案 5 :(得分:0)

移动

int x=10;
int y=10;

在循环之外

并将y增加30

if(您希望标签与起点对齐

int x=10;

可以保留在循环中

int x = 10;
for (int i = 0; i < hardrive.GetHardDriveName.Count; i++)
    {

        int y = 10;

        lblHDDName[i] = new Label();
        lblHDDName[i].Location = new System.Drawing.Point(x, y);
        lblHDDName[i].Text = "Test";
        groupBoxHDD.Controls.Add(lblHDDName[i]);

        y += 30;
    }