基于TabControl动态创建一组控件:        private ListView CreateListView(string[] captions)
        {
            ListView lv = new ListView();
            lv.Dock = DockStyle.Fill;
            lv.View = View.Details;
            lv.CheckBoxes = false;
            lv.GridLines = true;
            lv.FullRowSelect = true;
            lv.MultiSelect = true;
            int icount = captions.Length;
            for (int i = 0; i < icount; i++)
            {
                ColumnHeader col = new ColumnHeader();
                col.Text = captions[i];
                col.Width = 80;
                lv.Columns.Add(col);
            }
            return lv;
        }      private void button5_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++)
            {
                TabPage tp = new TabPage("page"+i.ToString());
                tp.BackColor = Color.Transparent;
                
                tc_main.TabPages.Add(tp);
                //创建panel
                Panel pl = new Panel();
                pl.Parent = tp;
                pl.BackColor = Color.Transparent;
                pl.Dock = DockStyle.Top;
                pl.Height = 21;
                //创建listview
                string[] captions = new string[5];
                captions[0] = "caption1";
                captions[1] = "caption2";
                captions[2] = "caption3";
                captions[3] = "caption4";
                captions[4] = "caption5";
                ListView lv= CreateListView(captions);
                lv.Parent = tp;
               
            }
        }
结果如论我怎么做,panel总是盖住ListView的caption!!!
(仅仅创建listview是没有问题的)为什么,为什么,为什么????

解决方案 »

  1.   

    因为你pl.Dock = DockStyle.Top;
    而list的DockStyle.Fill;
    所以pl会跑到最上面的,覆盖是正常的
      

  2.   

    这个和你控件的Z轴顺序有关,如果Z轴次序低,则先响应它的dock
    也就是说如果你pl比list的Z轴次序低,那pl就不会盖住list,而list则会充满除pl的所有空间
    可以参考:http://blog.54master.com/index.php/586951/viewspace-20983
      

  3.   

    可以添加一个splitContainer控件,设置成水平的,把panel放在上面,listview放在下面
      

  4.   

    你加入这个函数试试
    pl.SendToBack()
      

  5.   

    好了,果然是顺序的问题,我之前没有换对 ,
    应该是先创建listview后再创建panel,
    结贴,给分!
      

  6.   

    你试试让tabpage先添加panel,然后添加listview
    你这个问题的出现情况首先可以肯定的就是次序一定又问题具体你可以仔细看看designer中的代码一般都是有父容器的添加代码的