![](/img/trans.png)
[英]Placing multiple panels in a single cell of TableLayoutPanel in C# Winforms
[英]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;
}
感謝您的贊賞和幫助!
直到最后一刻,您必須將控件添加到tableLayourPanel
或panel
時,您的代碼才能tableLayourPanel
。 您只需將panel
添加,但不將button
/ label
到panel
。
因此,您必須選擇:
在panel
添加button
和label
,在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.