C# 开源控件DockPanel 使用心得

一、前言

最近使用Winform 做项目,发现Winform 非常好用,特别是之前有个客户定制需要涉及UI的,用VC++ 不是一般的难搞,后来考虑过以前玩过Winform ,修改窗体和控件的颜色都非常方便,因此果断直接上。

之前在使用VC++ 的MDI风格,自己搭了一个多窗体视图切换Demo,虽说好用,但是有一个Bug 却一直解决不了,因此,做了两个项目后,就不再使用了。

后面使用C#做项目的时候,由于需要一系列型号的共用一个软件,我想要是Winform的pandel 有Dock 的风格就方便多了。于是,百度一下,发现果然有,就是开源控件“DockPanel”

这个开源项目不是一般的好用,因此,这篇也是记录和总结一下,自己使用这个控件过程。


二、DockPanel使用

1、介绍

weiFenLuo.winFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库,可以实现像Visual Studio的窗口停靠、拖拽等功能。

控件官方下载地址:http://sourceforge.net/projects/dockpanelsuite/  


2、使用环境  Visual Studio 2010


3、使用方法

(1)新建解决方式,Windows 窗体应用程序

(2)修改WinForm窗体属性,设置其为MDI窗体(多文档窗体)如图:

C# 开源控件DockPanel 使用心得_第1张图片

(3)将WeifenLuo.WinFormsUI.Docking.dll 拷贝到工程目录,的bin 目录下Debug 和 Release 文件夹中。 

(4)解决方案管理器 --> 引用 --> 右键点击添加引用 --> 点击浏览 --> Debug 和 Release 文件夹 -->

选择WeifenLuo.WinFormsUI.Docking.dll --> 点击确定      如图:

C# 开源控件DockPanel 使用心得_第2张图片                          C# 开源控件DockPanel 使用心得_第3张图片


(5)工具箱-->选择项...-->.Net Framework组件-->浏览-->WeifenLuo.WinFormsUI.Docking.dll

如图1:

C# 开源控件DockPanel 使用心得_第4张图片


图2:

C# 开源控件DockPanel 使用心得_第5张图片



(6)拖动工具箱中的DockPanel控件到MainForm窗体,拖动时如出现如下错误:

C# 开源控件DockPanel 使用心得_第6张图片

出现这个问题的原因是,建立工程时,目标框架选择的是.Net FrameWork 4 Profile。

解决问题的方式是将在工程属性中,修改目标框架为 .Net FrameWork 4.


(7) 在主窗体放入一个dockpanel 之后,新建一个子窗体并修改其代码中修改窗体继承于DockContent,如下图:

using WeifenLuo.WinFormsUI.Docking;
namespace DockPanel_Test
{
    public partial class Form2 : DockContent
    {     
 	public Form2()
        {
            InitializeComponent();
        }
        private void Form2_Load(object sender, EventArgs e)
        {
        }
    }
}

(8)在主窗体中Load 方法中添加如下代码:
 Form2 form2 = new Form2();
           
            form2.Show(dockPanel1);
            form2.DockState = DockState.DockLeft;   //初始化子窗体显示在左边
编译,运行如下图,可以实现类似VC++ 中MDI 风格

C# 开源控件DockPanel 使用心得_第7张图片

可以增加多几个窗体,实现都视图操作。


三、使用总结

1、子窗体一般使用单例模式,这样子资源可以重复利用;

具体讲子窗体代码修改如下:

        private static Form2 mInstance;
        private static mDockState;

        private Form2()             //私有构造方法
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        #region 静态实例初始化函数
        public static Form2 GetInstance()
        {
            if (mInstance == null)
            {
                mInstance = new Form2();
            }
            return mInstance;
        }
        #endregion  


        #region 为了保证在关闭某一浮动窗体之后,再打开时能够在原位置显示,要对浮动窗体处理,处理窗体的DockstateChanged事件,标签窗体dock位置改变,记录到公共类  
  
        private void FrmFunction_DockStateChanged(object sender, EventArgs e)  
        {  
            //关闭时(dockstate为unknown) 不把dockstate保存  
            if (mInstance != null)  
            {  
                if (this.DockState == DockState.Unknown || this.DockState == DockState.Hidden)  
                {  
                    return;  
                }  

                mDockState = this.DockState;  
            }  
        }  
        #endregion  
 
        #region 关闭事件  
        private void FrmFunction_FormClosed(object sender, FormClosedEventArgs e)  
        {  
            mInstance = null;  // 否则下次打开时报错,提示“无法访问已释放对象”  
        }  
        #endregion  
  
    }


这样子就可以实现资源重复利用。


参考文章:

http://blog.csdn.net/zhangyuehua123/article/details/6861401


你可能感兴趣的:(C#)