weifengluo窗口拖扯工具

C#.NET 窗体停靠控件WeifenLuo.WinFormsUI.Docking.dll的使用

2014年07月20日 09:41:36 傲十郎 阅读数 8041 文章标签: 控件WeifenLuo.WinFormsUIdockpanel 更多

分类专栏: ------1.3.1 C# 开源库

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/aoshilang2249/article/details/37988971

类库介绍

weiFenLuo.winFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库。是一个很强大的界面布局控件,可以实现像Visual Studio的窗口停靠、拖拽等功能;可以保存自定义的布局为XML文件,可以加载XML配置文件.

该动态库源自开源项目DockPanelSuite,衔接地址是:weifenluo.winformsUI.Docking.dll源代码

可下载其源码、直接使用的dll及示例程序,目前最新版本为2.9.0.0,可在VS2012环境下使用。

Dockpanel中提供了几个可用的类,主要的有两个, 一是DockPanel,另一个是DockContent。DockPanel 是从panel继承出来的, 用于提供可浮动的dock的子窗口,DockContent是从form类中继承出来的, 用于提供可浮动的窗口基类. 就是说: DockContent对象可以在DockPanel对象中任意贴边, 浮动, TAB化等. 

使用说明

主窗体的建立

  • 创建窗体应用程序WeifenLuoUISample,添加引用WeifenLuo.WinFormsUI.Docking.dll
  • 重命名主窗体为MainWnd作为测试主窗口,设置主窗体Mainwnd的IsMdiContainer属性为true
  • 添加dockPanel控件到工具箱中:工具箱—>右键—>选择项—>.net组件—>浏览—>weiFenLuo.winFormsUI.Docking.dll,此时在工具箱将出现dockPanel,将dockPanel拖放到Mainwnd中,设置dockpanel的相关属性:dockPanel.Dock=Fill

停靠窗体的建立

【1】新建一个Windows 窗体Form1,修改窗体继承于WeifenLuo.WinFormsUI.Docking.DockContent:

 
  1. using System.Data;

  2. using System.Drawing;

  3. using System.Linq;

  4. using System.Text;

  5. using System.Windows.Forms;

  6.  
  7. namespace WeifenLuoUISample

  8. {

  9. public partial class Form1 : WeifenLuo.WinFormsUI.Docking.DockContent

  10. {

  11. public Form1()

  12. {

  13. InitializeComponent();

  14. }

  15. }

  16. }

【2】在MainWnd中添加Load事件的响应代码来创建停靠窗口

 
  1. using System;

  2. using System.Collections.Generic;

  3. using System.ComponentModel;

  4. using System.Data;

  5. using System.Drawing;

  6. using System.Linq;

  7. using System.Text;

  8. using System.Windows.Forms;

  9. using WeifenLuo.WinFormsUI.Docking;

  10.  
  11. namespace WeifenLuoUISample

  12. {

  13. public partial class MainWnd : Form

  14. {

  15. public MainWnd()

  16. {

  17. InitializeComponent();

  18. }

  19.  
  20. private void MainWnd_Load(object sender, EventArgs e)

  21. {

  22. Form1 form = new Form1();

  23. form.Show(_dockPanel, DockState.DockLeft);

  24. }

  25. }

  26. }


【3】运行效果如下

保存界面布局

【1】新建一个Windows 窗体Form2,修改窗体继承于WeifenLuo.WinFormsUI.Docking.DockContent,同上。

【2】设置Form1与Form2的HideOnClose属性为True,表示关闭窗体时,不是真的关闭销毁资源,而是隐藏。

【3】添加成员变量,用于保存界面布局:

 
  1. private static string _dockpanelConfigFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockManager.config");

  2. private Form1 _form1 = new Form1();

  3. private Form2 _form2 = new Form2();

【4】添加2个子菜单的Click事件,用于显示窗体Form1与Form2

 
  1. private void form1ToolStripMenuItem_Click(object sender, EventArgs e)

  2. {

  3. _form1.Show(_dockPanel, DockState.DockLeft);

  4. }

  5.  
  6. private void form2ToolStripMenuItem_Click(object sender, EventArgs e)

  7. {

  8. _form2.Show(_dockPanel, DockState.Document);

  9. }


【5】主窗体加载时,显示上次保存的界面,需要编写DeserializeDockContent回调函数,很简单:

回调函数:

 
  1. public IDockContent GetDeserializeDockContent(string persistString)

  2. {

  3. if (persistString == typeof(Form1).ToString())

  4. return _form1;

  5. if (persistString == typeof(Form2).ToString())

  6. return _form2;

  7. return null;

  8. }

主窗体加载,加载上次保存的界面:

 
  1. private void MainWnd_Load(object sender, EventArgs e)

  2. {

  3. try

  4. {

  5. if (File.Exists(_dockpanelConfigFile))

  6. _dockPanel.LoadFromXml(_dockpanelConfigFile, new DeserializeDockContent(GetDeserializeDockContent));

  7. }

  8. catch (Exception)

  9. {

  10. }

  11.  
  12. }


【6】主窗体关闭时,保存当前的界面:

 
  1. private void MainWnd_FormClosing(object sender, FormClosingEventArgs e)

  2. {

  3. _dockPanel.SaveAsXml(_dockpanelConfigFile);

  4. }


【7】注意

这种方式只能保存DockPanel中的界面布局,而主窗体的尺寸、显示的位置是无法保存时,所以需要保存主窗体的尺寸与位置的需要写一个配置文件,如.Config,保存主窗体启动的位置与尺寸,很简单,这里不再详细介绍。

【8】源码

WeiFenLuoSample

参考文献:http://blog.sina.com.cn/s/blog_5420e0000101et2e.html

发布了42 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u014090257/article/details/101392483
今日推荐