簡體   English   中英

以編程方式將兩個組件/對象添加到tableLayoutPanel的每個面板中-C#

[英]Add two components/objects into each panels of tableLayoutPanel programatically - C#

我有一個tableLayoutPanel (從工具箱中添加了10x10列和行的大小),並且在每個單元格中都添加了一個Panel所以我可以在一個單元格中添加兩個對象/組件。 每個單元格都包含一個label和一個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;
}

感謝您的贊賞和幫助!

直到最后一刻,您必須將控件添加到tableLayourPanelpanel時,您的代碼才能tableLayourPanel 您只需將panel添加,但不將button / labelpanel

因此,您必須選擇:

panel添加buttonlabel ,在tableLayoutPanel添加panel (這似乎是最合邏輯的):

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]);

您可以從createLables, createButton createPanels方法中刪除Controls.AddRange調用。 然后,您可以如下修改您的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;
}

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM