今天在做winForm开发的时候,突然觉得这个界面怎么看怎么不爽,于是就Google了下,发现有个叫MagicDocking的个东西,下回来,自己折腾折腾
开打它的示例文件,发现,哇,这家伙谁写的哦,这么乱,完全不是VS的样子么,呼,好不容易找到了一点点实现的办法,
首先,自然是要引用dll啦,右击项目->添加引用->浏览->找到magicDocking.dll;
然后,需要在form中添加引用
using Crownwood.DotNetMagic.Controls;
using Crownwood.DotNetMagic.Docking;
using Crownwood.DotNetMagic.Forms;
引用都完成后,从他的demo中复制了一段,dockingManage,Content 都有啊,也有实例化,最后也 dockManager.AddContentWithState了呀,为什么就是不显示在窗体呢?我也奇怪,为什么它的demo中也没有写把上面的哪个添加进form中哦,为什么它的能显示呢?我的就不能,最后,没办法,下杀手锏咯,右键变量->查找所有引用->一条一条的过了一边,最后,终于在demo的一大串连续的代码中找到了它,dockingManage中对this的指定,也就是说,dockingManage的实例化时的第一个参数:scrollableContorl,容器控件,而在它的demo中,是添加在了另一个容器中,然后再把另一个容器用Controls.Add()进了Form;
最后整理出来的代码;
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
{
InitializeComponent();
DockingManager dockManager; // 定义dockManager
dockManager = new DockingManager( this , VisualStyle.Office2007Silver); // 实例化dockManager并制定容器为this,央视为office2007Silver
Content testContent = new Content(dockManager); // 他就是停靠的那个控件的容器
testContent.Control = new MonthCalendar(); // 在该容器中添加一个控件,这里为 MonthCalendar;
testContent.Title = " test1 " ; // 为容器命名-标题
testContent.FullTitle = " test1-test " ; // 为容器命名-完整标题
testContent.AutoHideSize = testContent.Control.Size; // 设置自动缩小时的size
dockManager.Contents.Add(testContent); // 把它添加进dockManager
dockManager.AddContentWithState(testContent, State.DockRight); // 最后显示界面,停靠位置为 right
}
这样就完成了停靠窗体的实现过程,关键就是在于,需要一个停靠控件,就要实例化一个Content,并指定内容,最后添加进dockManage,而dockManage需要制定一个容易来放它自己。这样想把什么放在停靠窗体里面,就在testContent.Control 后面 new一个进去。
而对于其他控件的使用,我们可以查看它的demo有些可以直接添加到“工具箱”的-->“工具箱”-->“选择项”-->“找到manageDocking.dll”
OVER~~~~~~~`