【问题标题】:Create an array of labels in C# to show up on Form1.cs在 C# 中创建一个标签数组以显示在 Form1.cs 上
【发布时间】:2015-11-06 03:45:07
【问题描述】:

我想创建一个包含 361 个标签(即 label、label1、label2 等)的数组,并将它们物理定位并显示在我的 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 出现错误。不知道为什么。感谢您的帮助。

【问题讨论】:

  • 您介意提供确切的错误信息吗?
  • 没有语法错误,您必须更具体
  • 在 GomokuProject.exe 中发生了“System.IndexOutOfRangeException”类型的未处理异常附加信息:索引超出了数组的范围。
  • 以上代码会抛出IndexOutOfRange错误,将值362改为361
  • 是的,有效!谢谢你。现在我在 label.location 收到错误 - 新点... GomokuProject.exe 中发生了“System.NullReferenceException”类型的未处理异常附加信息:对象引用未设置为对象的实例。

标签: c# arrays winforms label


【解决方案1】:

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

Label[] board = new Label[361];

这会创建一个索引为 0 - 360 的 Label 数组。只需将 `for 循环更改为:

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

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

【讨论】:

  • 我什至没有看到他有 1 作为起始值。好皮卡
【解决方案2】:

改变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 };
        }

【讨论】:

    【解决方案3】:

    你的 board 数组大小为 361,所以 max 为 board[360]

    在你的 for 循环中 i

    【讨论】:

      【解决方案4】:

      我在循环中修改了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;
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 2016-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-19
        相关资源
        最近更新 更多