我有一个C#Windows窗体,它有一个SplitContainer。在SplitContainer2里面我有一个Panel(Panel1)。在该面板中,我创建了10个较小的面板,每个面板有5个TextBox。然后我将每个面板添加到Panel1。
for (int i = 1; i < 11; i++)
{
Panel panel = new Panel();
TextBox txtBox1 = new TextBox();
TextBox txtBox2 = new TextBox();
TextBox txtBox3 = new TextBox();
TextBox txtBox4 = new TextBox();
TextBox txtBox5 = new TextBox();
splitContainer2.Panel1.Controls.Add(panel);
panel.Controls.Add(txtBox1);
panel.Controls.Add(txtBox2);
panel.Controls.Add(txtBox3);
panel.Controls.Add(txtBox4);
panel.Controls.Add(txtBox5);
}
本质上,我试图创建一个包含10行和5列的表。我已经尝试使用TableLayoutPanel执行此操作,但无法弄清楚,所以这是我的解决方法。
我希望能够让用户点击按钮&#34;添加新行&#34;并动态创建一个带有五个新文本框的新面板,然后将其添加为&#34;表&#34;中的第十一行。用户可以继续添加新的&#34;行&#34;尽可能多的人。
在我的Panel1中,我将属性设置为AutoScroll,以便当太多&#34;行&#34;添加它自动滚动。出于某种原因,当&#34;行&#34;在可分割的面板下面,增加了一个额外的空间,并且每增加一个新的&#34;行&#34;此后。
问题:
1.如果我使用TableLayoutPanel会发生同样的事情吗?
2.导致&#34;额外空间的原因是什么?要加入吗?
修改
以下回复与我的回答相同,我只是没有太多运气将其应用到我的解决方案中。
Adding controls to the Panel works the first couple of times, then fritzes out
答案 0 :(得分:0)
您可能需要将新控件添加到之前添加的同一面板
var penel = splitContainer2.Panel1.Controls.OfType<Panel>().FirstOrDefault();
if(penel !=null)
penel.Controls.Add(yourNewTextBox);