如何将按钮列表转换为数组?

时间:2013-03-04 06:55:45

标签: c# arrays list button

我正在寻找一个二维的按钮阵列。我已经命名为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循环不太好,也许其中一个需要这样做,所以我该怎么办?< / p>

6 个答案:

答案 0 :(得分:1)

var myArray = new Button[,] { { b1, b2, b3, b4 },
                              { b5, b6, b7, b8 },
                              { b9, b10, b11, b12 },
                              { b13, b14, b15, b16 } };

答案 1 :(得分: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};

循环保持不变。

答案 2 :(得分:0)

您可以使用此代码

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

                             b4,b5,b6

                            }
                    };

或使用

      var x=  new Button[] { { b1, b2, b3, b4 } };

答案 3 :(得分: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));
}

答案 4 :(得分: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;
        }
    }
}

它将创建一个输出,如:

sample output

答案 5 :(得分: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();