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

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

其他编程Git开源网2020-06-07 10:01:58138A+A-

类库介绍

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:

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WeifenLuoUISample
{
    public partial class Form1 : WeifenLuo.WinFormsUI.Docking.DockContent
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
 
namespace WeifenLuoUISample
{
    public partial class MainWnd : Form
    {
        public MainWnd()
        {
            InitializeComponent();
        }
 
        private void MainWnd_Load(object sender, EventArgs e)
        {
            Form1 form = new Form1();
            form.Show(_dockPanel, DockState.DockLeft);
        }
    }
}

【3】运行效果如下

Docking.bmp

保存界面布局

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

 

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

 

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

        private static string _dockpanelConfigFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockManager.config");
        private Form1 _form1 = new Form1();
        private Form2 _form2 = new Form2();

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

       private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            _form1.Show(_dockPanel, DockState.DockLeft);            
        }
 
        private void form2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            _form2.Show(_dockPanel, DockState.Document);
        }
【5】主窗体加载时,显示上次保存的界面,需要编写DeserializeDockContent回调函数,很简单:
回调函数:
  public IDockContent GetDeserializeDockContent(string persistString)
        {
            if (persistString == typeof(Form1).ToString())
                return _form1;
            if (persistString == typeof(Form2).ToString())
                return _form2;
            return null;
        }

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

 private void MainWnd_Load(object sender, EventArgs e)
        {         
            try
            {
                if (File.Exists(_dockpanelConfigFile))
                    _dockPanel.LoadFromXml(_dockpanelConfigFile, new DeserializeDockContent(GetDeserializeDockContent));
            }
            catch (Exception)
            {
            }
 
        }

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

    private void MainWnd_FormClosing(object sender, FormClosingEventArgs e)
        {
            _dockPanel.SaveAsXml(_dockpanelConfigFile);    
        }

Docking2.bmp

【7】注意

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

 

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


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

点击这里复制本文地址 以上内容由Git开源网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

Git开源网_git开源代码资源网_git开源博客 © All Rights Reserved.  
文章中出现的商标及图像版权属于其合法持有人,只供传递信息之用,非商务用途。本站所上传资源,只用于交流学习所用。本站资源收集于网络以及网友投稿,其版权归原创者所有,如有侵害到你的权益,或有不妥之处,请联系我们删除,敬请谅解。Email:admin#gitoscc.com(#更换成@)
Copyright © Git开源网 All rights reserved. 黑ICP备18006154号-1 由ZBlog驱动

网站管理