在C#中创建一个标签数组以显示在Form1.cs上



我想创建一个361个标签的阵列(即标签、标签1、标签2等),并将它们物理定位并显示在我的Form1.cs[Design]上。

public Form1()
{
    InitializeComponent();
    Label[] board = new Label[361];
    for (int i = 1; i < 362; i++)
    {
        board[i] = new Label { Name = "label" + i, Height = 55, Width = 55, MinimumSize = new Size(55, 55), Text = "label " + i   };
    }
    int x = 0;
    int y = 0;
    foreach (var Label in board)
    {
        if (x >= 580)
        {
            x = 0;
            y = y + Label.Height + 55;
        }
        Label.Location = new Point(x, y);
        this.Controls.Add(Label);
        x += Label.Width;
    }
}

我的text = "label" + 1出现错误。不知道为什么。谢谢你的帮助。

数组在C#中为0索引,您的最后一次循环迭代将超过最大索引。

Label[] board = new Label[361];

这创建了一个索引为0-360的CCD_ 2数组。只需将"for循环"更改为:

for (int i = 0; i < 361; i++)

这也将修复您的NullReferenceException,因为数组中的第一个项从未初始化

从更改for循环

        Label[] board = new Label[361];
        for (int i = 1; i < 362; i++) {
            board[i] = new Label { Name = "label" + i, Height = 55, Width = 55, MinimumSize = new Size(55, 55), Text = "label " + i };
        }

        Label[] board = new Label[361];
        for (int i = 0; i < 361; i++) {
            board[i] = new Label { Name = "label" + i, Height = 55, Width = 55, MinimumSize = new Size(55, 55), Text = "label " + i };
        }

您的板阵列大小为361,因此最大值为板[360]

在你的for循环中,i<362..这意味着它将尝试获得板[360

的值

我在循环中修改了int的值,这是你想要的吗?

        for (int i = 0; i < 361; i++)
        {
            board[i] = new Label { Name = "label" + i, Height = 55, Width = 55, MinimumSize = new Size(55, 55), Text = "label " + i };
        }
        int x = 0;
        int y = 0;
        foreach (var Label in board)
        {
            if (x >= 580)
            {
                x = 0;
                y = y + Label.Height + 55;
            }
            Label.Location = new Point(x, y);
            this.Controls.Add(Label);
            x += Label.Width;
        }

最新更新