Panel中可以不断的套Panel,但是Panel的嵌套会有一个上限,当达到这个上限后,界面就不听使唤了。但这时程序并不会崩溃,Panel的嵌套数继续增加,会达到一个崩溃的上限值。
测试代码如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PanelNest { public partial class Form1 : Form { public Form1() { InitializeComponent(); Panel last = null; for (int i = 0; i < <strong><span style="color:#3366ff;">29</span></strong>; i++) { Panel panel = new Panel(); panel.Dock = DockStyle.Fill; if (last==null) { this.Controls.Add(panel); } else { last.Controls.Add(panel); } last = panel; } last.BackColor = Color.Blue; } } }从代码中可以看到,每一个panel都是fill的,实际上却没有如我们所期望的。为了能更好的分辨,我们将最后一个Panel的背景色设置为blue。看一下效果图。
最大化后的图
当我们把Panel的上限数设置为30,新代码如下
Panel last = null; for (int i = 0; i < <span style="color:#3366ff;"><strong>30</strong></span>; i++) { Panel panel = new Panel(); panel.Dock = DockStyle.Fill; if (last==null) { this.Controls.Add(panel); } else { last.Controls.Add(panel); } last = panel; } last.BackColor = Color.Blue;最大化后的图如下
会发现,最大化后,蓝色底的Panel并没有最大化,但我们预期是要最大化的。这就说明Panel的嵌套是有一个上限值的。经过测试发现,不同的系统会有所差异,在win7上有的为15,有的为29,win10上为29。
当我们继续增加panel的嵌套数量,程度将会崩溃。代码如下。
Panel last = null; for (int i = 0; i <<span style="color:#3366ff;"><strong> 50</strong></span>; i++) { Panel panel = new Panel(); panel.Dock = DockStyle.Fill; if (last == null) { this.Controls.Add(panel); } else { last.Controls.Add(panel); } last = panel; } last.BackColor = Color.Blue;异常图如下
当Panel的数量达到50个时,程序出错了。提示创建窗口句柄时出错。
所以在使用Panel进行嵌套的时候,务必要注意嵌套的层数,尤其是当使用封装的自定义用户控件时,由于自定义用户控件里面已经使用Panel等容器进行封装,外面调用时再放到若干层的容器中,最终就有可能报错。
转载请注明出处。