你的位置:首页 > ASP.net教程

[ASP.net教程]weifenluo.winformsui.docking 详解


基础布局网上有的是,不再赘述,在此仅描写一些犄角噶蓝儿,不容易查到,但会遇到的问题:

1,假设共3个区域,想让布局显示方式为左侧一个区域,右侧呈上下区域。通过dockpanel.show(参数)逐一show出来,结果却发现可能布局与自己想象的不一致。

结果布局可能为上一个区域,左右两个区域的这种布局,

图:

,

解决方案:改变代码show的顺序即可。图:

2,点击首页按钮,自动在document区域新增首页。本人的能力有限,这个问题也困惑了我一阵,因为dockpanel的tab页其实是个窗体,如果用Form1 frm1 = new Form1()的方式,的确可是实现,但是,大家也看到了,首页这个问题到好办,可是左侧那么多栏目,点一下,就new一个新窗体,那么需要在项目中建多少个窗体才能解决问题呀。显然,这不现实。

解决方案:很简单,直接new即可,具体看图:

3,以左侧区域为例,点击区域内的×号,窗体没了,但是通常设计会在菜单栏加个显示按钮,以便用户想要再看的时候,不用再重新启动程序,那么怎么解决呢?第一步,设置isHidden而不是hide(),第二歩,将左侧窗体的属性HideOnClose设置为true(默认为false),这两步缺一不可。图:

4,点击左侧树栏目,通过栏目id查询右侧datagridview

此问题需要解决的难点,主要是:(1),这不像winform的资源管理器制作,这是两个窗体间的传值,但由于加上了dockpanel插件,传值的方法又和传动的winform不太一样;(2),dockpanel插件只有一个,区域是自己分配的,在dpLeft窗体上的treeview的click事件传参无效,也就是只能用主窗体对象传参,但是单击事件需要在主窗体弄;(3,),不能通过问题2的解决方案new,否则会出现新的tab窗体,然而右侧区域那两个tab数量是固定的,不能新增窗体。

好吧,无需多言,直接上图:

6,关闭所有document区域的文档功能。

前面已经提到,不可能新增一个tab,就去新增一个form,这些tab全都是一个对象new出来的,即dpContent对象new出来的,那么这时如果关闭,用dpContent..IsHidden=true的话,只会关闭一个tab,并且这样关闭后,如果再新增tab,会报异常的。

解决方案:循环documents即可,具体代码见图:

本人平时主要以web为主,这次是第一次接触winform,外加个dockpanel插件,或许可能有一些问题winform本身就可以解决,希望我这点小玩儿闹能对大家有所帮助,谢谢。