C# 将面板动态添加到窗体

C# 将面板动态添加到窗体,c#,winforms,dynamic,controls,panel,C#,Winforms,Dynamic,Controls,Panel,我试图根据收到的ID数量将面板添加到表单中。在运行时,面板被添加到表单中,但只有第一个面板有控件,我不明白为什么 这是我的实际代码: private void loadItems(List<int> ids) { int id = 0, panelX = 10, panelY = -30, itemslblX = 15, itemslblY = -65, IDtxtX = 360,

我试图根据收到的ID数量将面板添加到表单中。在运行时,面板被添加到表单中,但只有第一个面板有控件,我不明白为什么

这是我的实际代码:

private void loadItems(List<int> ids)
{
    int id = 0,
        panelX = 10,
        panelY = -30,
        itemslblX = 15,
        itemslblY = -65,
        IDtxtX = 360,
        IDtxtY = -40,
        nametxtX = 130,
        nametxtY = -40;

    int height = (80 * ids.Count) + 50;
    this.Size = new Size(600,height);

    foreach(int c in ids)
    {
        panelY = panelY + 80;
        itemslblY = itemslblY + 80;
        terrainMenuY = terrainMenuY + 80;
        IDtxtY = IDtxtY + 80;
        nametxtY = nametxtY + 80;

        Panel panel = new Panel();
        panel.Location = new Point(panelX, panelY);
        panel.Dock = DockStyle.None;
        panel.Height = 75;
        panel.Width = 575;
        panel.BackColor = Color.Gray;
        panel.Name = ids[id]+"Panel".ToString();

        Label itemslbl = new Label();
        itemslbl.Location = new Point(itemslblX, itemslblY);
        itemslbl.Text = "Imagen            Nombre                                         ID";
        itemslbl.Height = 20;
        itemslbl.Width = 550;
        itemslbl.Name = ids[id] + "itemsLabel".ToString();

        TextBox IDtxt = new TextBox();
        IDtxt.Location = new Point(IDtxtX, IDtxtY);
        IDtxt.Height = 27;
        IDtxt.Width = 200;
        IDtxt.Text = ids[id].ToString();
        IDtxt.ReadOnly = true;
        IDtxt.Name = ids[id] + "IDtext".ToString();

        TextBox nametxt = new TextBox();
        nametxt.Location = new Point(nametxtX, nametxtY);
        nametxt.Height = 27;
        nametxt.Width = 200;
        nametxt.ReadOnly = true;
        nametxt.Name = ids[id] + "nameText".ToString();

        panel.Controls.Add(itemslbl);
        panel.Controls.Add(nametxt);
        panel.Controls.Add(IDtxt);

        this.Controls.Add(panel);
        id++;
    }
}
private void加载项(列表ID)
{
int id=0,
面板X=10,
panelY=-30,
itemslblX=15,
ItemsBly=-65,
IDtxtX=360,
IDtxtY=-40,
nametxtX=130,
nametxtY=-40;
整数高度=(80*ids.Count)+50;
此尺寸=新尺寸(600,高度);
foreach(id中的int c)
{
panelY=panelY+80;
ItemsBly=ItemsBly+80;
terrainMenuY=terrainMenuY+80;
IDtxtY=IDtxtY+80;
nametxtY=nametxtY+80;
面板=新面板();
面板位置=新点(面板X、面板Y);
panel.Dock=DockStyle.None;
面板高度=75;
面板宽度=575;
panel.BackColor=Color.Gray;
panel.Name=ids[id]+“panel.ToString();
标签项SLBL=新标签();
itemslbl.Location=新点(itemslblX,itemslblY);
itemslbl.Text=“Imagen Nombre ID”;
项目BL.高度=20;
项目BL.宽度=550;
itemslbl.Name=ids[id]+“itemsLabel”.ToString();
TextBox IDtxt=新建TextBox();
IDtxt.Location=新点(IDtxtX,IDtxtY);
IDtxt.Height=27;
IDtxt.Width=200;
IDtxt.Text=ids[id].ToString();
IDtxt.ReadOnly=true;
IDtxt.Name=ids[id]+“IDtext.ToString();
TextBox name txt=新建TextBox();
nametxt.Location=新点(nametxtX,nametxtY);
nametxt.Height=27;
nametxt.Width=200;
nametxt.ReadOnly=true;
nametxt.Name=ids[id]+“nameText”.ToString();
panel.Controls.Add(itemslbl);
panel.Controls.Add(nametxt);
panel.Controls.Add(IDtxt);
此.Controls.Add(面板);
id++;
}
}


请提供任何建议,谢谢您的时间。

乍一看,您应该更改循环中内部控件的位置,或者使用不同的面板,就像TableLayoutPanel加载控件一样,非常感谢。现在我只需要整理一下。很高兴听到。我的猜测是,你只是简单地将每个id的新控件置于旧控件之上,这就是为什么你会觉得它们不在那里,因为你看不到它们。幸运的是,能够将它们组织起来:)如果您在代码中使用
int c
,比如将其写入id文本框,您可能会意识到,您只会看到最后一个用于自动布局插入FlowLayoutPanel的IDF!您还可以选择创建一个包含标签和文本框的UserControl,然后将UserControl的多个实例添加到面板容器中。