1

我正在寻找制作一个二维按钮数组。我已经命名了 b1、b2、b3、b4(b5 将在下一行等)。我可以将按钮添加到一维列表中,如下所示:

List<Button> buttonList;

buttonList = new List<Button> {b1,b2,b3,b4,b5 (etc.)};

现在,我需要将这些按钮放入一个类似这样的数组中:

{{0, 1, 2 , 3}, {4, 5, 6, 7}, {8, 9, 10, 11}, {12, 13, 14, 15}};

其中b1将是 0,b2将是 1,依此类推。

我对此很陌生,找不到任何类似的东西,我对 for/foreach 循环不太好,也许需要其中一个循环来执行此操作,那么我该怎么做呢?

4

6 回答 6

1
var myArray = new Button[,] { { b1, b2, b3, b4 },
                              { b5, b6, b7, b8 },
                              { b9, b10, b11, b12 },
                              { b13, b14, b15, b16 } };
于 2013-03-04T07:03:00.727 回答
0

如果要将列表转换为数组(连续 4 个),这是一种 LINQ 方法:

var buttonsArray = buttonsList
                   .Select((b, i) => new {Index = i, Button = b})
                   .GroupBy(x => x.Index/4)
                   .Select(x=>x.Select(y=>y.Button).ToArray())
                   .ToArray();
于 2013-03-04T07:10:53.470 回答
0

您可以使用此代码

   var x = new List<List<Button>>
                    {
                        new List<Button>
                            {

                             b4,b5,b6

                            }
                    };

或使用

      var x=  new Button[] { { b1, b2, b3, b4 } };
于 2013-03-04T07:04:14.087 回答
0

我建议使用列表列表而不是数组。

var groupedList = new List<List<Button>>();

for(i = 0; i < buttonList.length / 4 + 1; i++) //plus one will ensure we don't loose buttons if their number doesn't divide on four
{
   groupedList.Add(buttonList.Skip(i * 4).Take(4));
}
于 2013-03-04T07:05:56.707 回答
0

如果你需要更新你的,试试List<Button>这个int [][]

var nums = new[] { new[] { 0, 1, 2, 3 }, new[] { 4, 5, 6, 7 }, new[] { 8, 9, 10, 11 }, new[] { 12, 13, 14, 15 } };
int counter = 0;
foreach (int[] ints in nums)
{
    foreach (int i in ints)
    {
        buttonList[counter].Text = i.ToString();
        counter++;
    }
}

解决此问题的更好方法是:

private List<Button> buttonList = new List<Button>();
private void addButtonsDynamically(object sender, EventArgs e)
{
    int top = 10, left = 10;
    for (int i = 1; i <= 16; i++)
    {
        Button btn = new Button();
        btn.Parent = this;
        btn.Size = new Size(25, 25);
        btn.Text = (i - 1).ToString();
        btn.Location = new Point(left, top);

        left += 35;
        if (i > 0 && i % 4 == 0)
        {
            top += 35;
            left = 10;
        }
    }
}

它将创建如下输出:

样本输出

于 2013-03-04T07:06:04.647 回答
0

尝试这样的事情:

var lst = new List<List<Button>>();
lst.Add(new List<Button>{b1,b2,b3});
lst.Add(new List<Button>{b4,b5,b6});

foreach(var buttonList in lst)
{
  foreach(var button in buttonList )
  {
    //do stuff with button
  }
}

或者,如果您需要将集合设置为数组(无论出于何种原因)

var ary = List<Button>[2]; //two elements in ary.
ary[0] = new List<Button>{b1,b2,b3};
ary[1] = new List<Button>{b4,b5,b6};

循环保持不变。

于 2013-03-04T07:01:32.167 回答