zoukankan      html  css  js  c++  java
  • Panel最大嵌套数

    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等容器进行封装,外面调用时再放到若干层的容器中,最终就有可能报错。

    转载请注明出处。




  • 相关阅读:
    Java基础之IO流,使用File类以树形结构打印指定文件目录
    Java基础之IO流,以字节流的方式操作读写文件FileOutputStream和FileInputStream的使用
    Java基础之IO流,自定义字节流缓冲区装饰类(模仿)
    Java基础之IO流,转换流应用InputStreamReader,OutputStreamWriter
    碰撞处理游戏的原型
    flash中物体运动基础之六方向与角度
    flash中物体运动基础之七碰撞处理
    推导坐标旋转公式
    flash中物体运动基础之一匀速运动
    flash中物体运动基础之五障碍物
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604948.html
Copyright © 2011-2022 走看看