我正在寻找一个二维的按钮阵列。我已经命名为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>
答案 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;
}
}
}
它将创建一个输出,如:
答案 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();