0

サイズが 25x25 のユーザー コントロールが 1 つあり、フォーム上の位置を変更できる 3 つの個別の 10x10 グリッドに複製したいと考えています。パンデミック シミュレーションを作成しているので、3 つのグリッドは 3 つの国を表し、グリッド スクエアの感染状況に応じてユーザー コントロールの色を変更します。

私はこれを長い間いじっていましたが、動作させることができません.Me.Controls.Add(UserControl)を使用すると、前のものを上書きし、フォームに1つのユーザーコントロールしか残っていません.

助けていただければ幸いです。

4

1 に答える 1

0

以下は、グリッドを作成するメソッドで、この「グリッド」の「セル」に任意のコントロールを配置できます。これを実行するには、このコードを任意のボタン ハンドラーに貼り付けると、必要なすべての処理が実行されます。これが正確な解決策かどうかはわかりませんが、何かを得られるかもしれません。さまざまな状態の画面のモックを作成していただけると助かります。これにより、実際に何を求めているかを理解できます。

DoAGridボタン ハンドラのメソッドを呼び出します。

 DoAGrid(bool.Parse(_txtTest.Text)); // type true or false in txt

メソッド

private void DoAGrid(bool isTest)
{

        const int size = 30; // I give 2 for controll padding
        const int padding = 20; // x and y starting padding
        Point[,] grid = new Point[10,10]; // x and y of each control


        List<Control> btns = null; 
        if (isTest) btns  = new List<Control>(100);

        for (int x = 1; x < 11; x++)
        {
            for (int y = 1; y < 11; y++)
            {
                grid[x - 1, y - 1] = new Point(padding + x*size - 30 - 1,  padding + y*size - 30 - 1); // 30 - 1 --> size + 2
                if (isTest)
                { // this test will add all avail buttons so you can see how grid is formed
                    Button b = new Button();
                    b.Size = new Size(size, size);
                    b.Text = "B";
                    b.Location = grid[x - 1, y - 1];
                    btns.Add(b);
                }

            }
        }

        Form f = new Form();
        f.Size = new Size(1000, 1000);

        if (isTest)
        {
            f.Controls.AddRange(btns.ToArray());
        }
        else
        {
            // Add controls to random grid cells
            Button b1 = new Button();
            b1.Size = new Size(size, size);
            b1.Text = "B1";
            b1.Location = grid[3, 3];
            Button b2 = new Button();
            b2.Size = new Size(size, size);
            b2.Text = "B2";
            b2.Location = grid[5, 5];
            Button b3 = new Button();
            b3.Size = new Size(size, size);
            b3.Text = "B3";
            b3.Location = grid[8, 8];
            Button b4 = new Button();
            b4.Size = new Size(size, size);
            b4.Text = "B4";
            b4.Location = grid[8, 9];
            Button b5 = new Button();
            b5.Size = new Size(size, size);
            b5.Text = "B5";
            b5.Location = grid[9, 8];
            Button b6 = new Button();
            b6.Size = new Size(size, size);
            b6.Text = "B6";
            b6.Location = grid[9, 9];
            f.Controls.AddRange(new Button[] { b1, b2, b3, b4, b5, b6 });
        }

        f.ShowDialog();

    }
于 2013-10-31T21:59:12.303 に答える