C# 将多个面板添加到表单中

C# 将多个面板添加到表单中,c#,winforms,C#,Winforms,您好,我正在尝试创建一个列表,其中包含名为MyPanel的自定义面板,并将列表中的面板添加到我的from中。然而,当Form1加载时,表单实际上显示的是1个面板,而不是总共10个面板。这是我的密码: private void Form1_Load(object sender, EventArgs e) { List<MyPanel> tenPanels = new List<MyPanel>(); for(

您好,我正在尝试创建一个列表,其中包含名为MyPanel的自定义面板,并将列表中的面板添加到我的from中。然而,当Form1加载时,表单实际上显示的是1个面板,而不是总共10个面板。这是我的密码:

private void Form1_Load(object sender, EventArgs e)
        {
            List<MyPanel> tenPanels = new List<MyPanel>(); 
            for(int i=0;i<10;i++)
            {
                MyPanel mp = new MyPanel();
                tenPanels.Add(mp);
                mp.Name = "digitPanel" + i;
                mp.Location = new System.Drawing.Point(10+i, 32);
                mp.Size = new System.Drawing.Size(147, 173);
                this.Controls.Add(mp);
            }
            foreach(Panel p in tenPanels)
            {
                this.Controls.Add(p);
            }
        }
private void Form1\u加载(对象发送方,事件参数e)
{
List tenPanels=新列表();

对于(inti=0;i,您至少有三个问题

1,您尝试将每个新MyPanel添加两次,一次在主循环中,然后在另一个循环中添加。我建议您完全删除第二个循环

2,每个新面板的计算位置仅为最后一个面板右侧的1个像素,这意味着它们将重叠并相互隐藏。因此,将该点更新为合理的位置

3、每次添加新面板时,窗口都会执行布局计算。您可以通过要求控件在更新其布局之前等待添加最后一个面板来减少这种情况。这将提供更好的性能

this.BeginUpdate();

// your code

this.EndUpdate();

10+i
不应该更像
10+(i*147)
?您将每个面板添加两次,不需要最终的
foreach
如果您将十个面板放在彼此的顶部,您将只看到最顶部的面板。似乎如果您按照评论员Dan-o的建议修复代码,您将看到所有面板。当然,您还应该修复调用的冗余循环ode>添加()
;它本身不会损害任何东西,但也不是必需的。谢谢!我知道我添加了两次面板,因为我试图以不同的方式将这些面板添加到from1;没有注意到我只将新面板设置为上一个面板右侧的1个像素,它与上一个面板明显重叠;顺便问一下,我应该放置BeginUpdate()关于我的“for”循环的EndUpdate()?this.SuspendLayout();for(int i=0;i