1

我有一个tableLayoutPanel(从工具箱添加的 10x10 列和行的大小),并且我Panel在每个单元格中添加了一个,因此我可以将两个对象/组件添加到一个单元格中。每个单元格都包含 alabel和 a button。问题是我无法以panel编程方式将这两个组件添加到一个中。我应该怎么办?

这是我的代码:

private int[,] grid;
private Button[,] btn_grid;
private Label[,] lbl_grid;
private int timer = 0;
private Panel[,] pnl_grid;

        private bool createGrid()
        {
            Random rnd1 = new Random();
            grid = new int[width, height];
            pnl_grid = new Panel[width, height];
            btn_grid = new Button[width, height];
            lbl_grid = new Label[width, height];

            for (int x = 0; x <width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    btn_grid[x, y] = createButton(x, y);
                    lbl_grid[x, y] = createLables(x,y);
                    pnl_grid[x, y] = createPanels(x, y);

                    **//something's missing here to add the 2 components into a panel** 

                    tableLayoutPanel2.Controls.Add(pnl_grid[x,y]);


                }
            }}


private Button createButton(int gridX, int gridY)
{
    Button bttn = new Button();
    bttn.Text = "";
    bttn.Name = gridX.ToString() + " " + gridY.ToString();
    bttn.Size = new System.Drawing.Size(30, 30);
    Controls.AddRange(new System.Windows.Forms.Control[] { bttn, });
    bttn.Click += new System.EventHandler(bttnOnclick);
    //bttn.MouseClick += new System.Windows.Forms.MouseEventHandler(this.bttnOnRightClick);

    return bttn;
}

private Label createLables(int gridX, int gridY)
{
    Label lbl = new Label();
    lbl.Name = gridX.ToString() + " " + gridY.ToString();
    lbl.Text = "0";
    lbl.Size = new System.Drawing.Size(30, 30);
    //lbl.Font = new Font("Microsoft Sans Serif", 15.75f, lbl.Font.Style, lbl.Font.Unit);
    Controls.AddRange(new System.Windows.Forms.Control[] { lbl, });
    return lbl;
}

private Panel createPanels(int gridX, int gridY)
{
    Panel pnl = new Panel();
    pnl.Name = gridX.ToString() + " " + gridY.ToString();
    //pnl.Text = "0";
    pnl.Size = new System.Drawing.Size(30, 30);
    //lbl.Font = new Font("Microsoft Sans Serif", 15.75f, lbl.Font.Style, lbl.Font.Unit);
    Controls.AddRange(new System.Windows.Forms.Control[] { pnl, });
    return pnl;
}

感谢您的关注和帮助!

4

2 回答 2

1

在您必须将控件添加到tableLayourPanel或的最后一刻之前,您的代码都很好panel。您只需将/panel但不添加button/labelpanel.

因此,您必须选择:

添加buttonandlabel到 thepanelpanelthe tableLayoutPanel(这似乎是最合乎逻辑的):

btn_grid[x, y] = createButton(x, y);
lbl_grid[x, y] = createLables(x,y);
pnl_grid[x, y] = createPanels(x, y);
pnl_grid[x, y].Controls.Add(btn_grid[x, y]);
pnl_grid[x, y].Controls.Add(lbl_grid[x, y]);
tableLayoutPanel2.Controls.Add(pnl_grid[x,y]);

或将三个元素直接添加到tableLayoutPanel

btn_grid[x, y] = createButton(x, y);
lbl_grid[x, y] = createLables(x,y);
pnl_grid[x, y] = createPanels(x, y);
tableLayoutPanel2.Controls.Add(btn_grid[x,y]);
tableLayoutPanel2.Controls.Add(lbl_grid[x,y]);
tableLayoutPanel2.Controls.Add(pnl_grid[x,y]);
于 2013-07-13T17:27:19.053 回答
0

您可以从方法中删除Controls.AddRange调用。createLables, createButton createPanels然后你可以修改你的 createpanels 方法如下

private Panel createPanels(int gridX, int gridY)
{
    Label lbl = lbl_grid[gridX,gridY];
    Button btn = btn_grid[gridX,gridY];
    Panel pnl = new Panel();
    pnl.Name = gridX.ToString() + " " + gridY.ToString();
    //pnl.Text = "0";
    pnl.Size = new System.Drawing.Size(30, 30);
    //lbl.Font = new Font("Microsoft Sans Serif", 15.75f, lbl.Font.Style, lbl.Font.Unit);
    pnl.Controls.AddRange(new System.Windows.Forms.Control[] { lbl,btn });
    lbl.Dock = DockStyle.Top;
    btn.Dock = DockStyle.Fill;
    return pnl;
}

希望这可以帮助

于 2013-07-13T17:30:10.327 回答