mdiFrm 是mdi窗体,并添加了菜单和dockpanel;
frm1 是mdiFrm的子窗体,在mdiFrm显示时(shown)调用显示frm1,代码如下:
 frm1  = new Form1();
 frm1 .MdiParent = this;
 frm1 .Show(this.dockPanel);
 frm1 .Show(this.dockPanel, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft);
在frm的load事件中加载treeview的节点,并设置treeView1.Nodes[0].ExpandAll();也就是把节点1的所以子节点都展开,但是这样并不能实现所预想的treeview的展开效果。确认过treeView1.Nodes[0].ExpandAll();在一般的form中能正常的展开treeview的节点!
请问,该怎么解决?在使用dockpanel的同时,使得frm1在load的时候把treeview的节点展开!

解决方案 »

  1.   

    没遇到过这问题啊.而且你的Show好象有问题
      

  2.   

    呵呵,show没有问题的,显示的都是正常的,这只是dockpanel显示时的格式
    谢谢了!
      

  3.   

    在frm的load事件中加载treeview的节点,并设置treeView1.Nodes[0].ExpandAll();这里不对,类似于展开的操作都应该放在Shown中进行,只有此时所有的窗体布局才完成,展开才能得到正确的宽度。
      

  4.   

    试了一下,可以展开。估计就像上面说的一样,你先展开再去加子节点了。
    另外,frm1 .MdiParent = this; 这句不必写。
      

  5.   

    呵呵,是先写的加载数据后写的展开,在一般的form中是可以正常展开的。(同样的一段程序)
    但是这个是在mdi的dockpanel中一个frm,不知道为什么就是不显示
      

  6.   

    to:gisyellow 
    放在shown中也不行,把加载和展开都放在shown中,就连加载子节点的方法也不执行,只加treeView1.Nodes[0].ExpandAll(); 在shown中也没有展开的效果!to:cja03 
    frm1 .MdiParent = this; 
    这句对于我来说是有用的,因为frm1是mdifrm的mdiChilden,要不然就会影响重复的判断
      

  7.   

    再次强调下,在一般的form中是可以实现展开的!
    frm1是mdiFrm的子窗体,以dockpanel的left格式来显示的,在一般form中能实现treeview节点展开的代码,在frm1中就不行了。
    好像是因为frm1是以mdifrm的dockpanel格式显示的原因,但不知怎样解决!且这种只是猜测...
    大家继续支持啊!
      

  8.   

    1.确认你的frm1 是从DockContent类继承,
    2.加载TreeView的节点数据的操作在frm1的构造函数中执行,如果你的TreeView不是设计时添加的确认是否添加到了父级控件的Controls集合中。
    3.然后在frm1的Load或Shown事件中调用treeView1.Nodes[0].ExpandAll();方法。如果按上面的方法还是解决不了,那估计是你的代码其他地方有问题,跟DockPanel没有关系。
      

  9.   

    to:zhzuo
    如果你的TreeView不是设计时添加的确认是否添加到了父级控件的Controls集合中。
    这个不是太明白能不能详细解释下,谢谢了!新手不是太懂!
      

  10.   

    把TreeView添加到Form中,类似下面的代码
    TreeView tv = new TreeView();form1.Controls.Add(tv);
      

  11.   

    我的是在winform中直接加的控件
    这样加可行?this.Controls.Add(treeView1); treeview1是treeview的Name
    我的这个treeview放在splitpanel上的,改过这个后就不显示了。
      

  12.   

    你指的splitpanel是不是SplitContainer?
    修改成下面,
    splitpanel.Panel1.Controls.Add(treeview1);这样TreeView就会在Panel1里面显示。
      

  13.   

    问题已解决!
    把加载的和展开的方法放在frm1 .Show(this.dockPanel, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft); 后调用就可以了!
    谢谢了!散分结贴!