1

ボタンの2次元配列を作成しようとしています。私はb1、b2、b3、b4という名前を付けました(b5は次の行にありますなど)。以下に示すように、ボタンを1次元リストに追加できます。

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ループがあまり得意ではなく、これを行うにはこれらの1つが必要だったので、どうすればよいですか?

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 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 に答える
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 に答える