首页 > 代码库 > C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用

C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用

概述

 转自 http://www.cnblogs.com/luomingui/archive/2013/09/19/3329763.html

   最近几天一直在关注WinFrom方面的文章 有想着提炼一下项目的公共部分,公共部分有分为 界面,类库两方面,今天主要是把界面也先提炼提炼。

 

WeifenLuo.WinFormsUI.Docking + OutLookBar结合使用的效果图

 

技术分享

 

WeifenLuo.WinFormsUI.Docking修改记录

 

从http://sourceforge.net/projects/dockpanelsuite上下载源码新建DockContentEx文件并继承WeifenLuo.WinFormsUI.Docking.DockContent在里面加入ContextMenuStrip菜单工具并加入 关闭 全部关闭 除此之外全部关闭 三个菜单。项目结构如下

技术分享

组件结构图:

技术分享

源代码如下:

/// <summary>    /// 很多窗体都在Tab中有个右键菜单,右击的里面有关闭,所以最好继承一下DockContent,    /// 让其它窗体只要继承这个就有了这个右键菜单    /// </summary>    public class DockContentEx : DockContent    {        //在标签上点击右键显示关闭菜单        public DockContentEx( )        {            System.Windows.Forms.ContextMenuStrip cms = new System.Windows.Forms.ContextMenuStrip();            //             // tsmiClose            //             System.Windows.Forms.ToolStripMenuItem tsmiClose = new System.Windows.Forms.ToolStripMenuItem();            tsmiClose.Name = "cms";            tsmiClose.Size = new System.Drawing.Size(98, 22);            tsmiClose.Text = "关闭";            tsmiClose.Click += new System.EventHandler(this.tsmiClose_Click);            //             // tsmiALLClose            //             System.Windows.Forms.ToolStripMenuItem tsmiALLClose = new System.Windows.Forms.ToolStripMenuItem();            tsmiALLClose.Name = "cms";            tsmiALLClose.Size = new System.Drawing.Size(98, 22);            tsmiALLClose.Text = "全部关闭";            tsmiALLClose.Click += new System.EventHandler(this.tsmiALLClose_Click);            //             // tsmiApartFromClose            //             System.Windows.Forms.ToolStripMenuItem tsmiApartFromClose = new System.Windows.Forms.ToolStripMenuItem();            tsmiApartFromClose.Name = "cms";            tsmiApartFromClose.Size = new System.Drawing.Size(98, 22);            tsmiApartFromClose.Text = "除此之外全部关闭";            tsmiApartFromClose.Click += new System.EventHandler(this.tsmiApartFromClose_Click);            //             // tsmiClose            //             cms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {            tsmiClose,tsmiApartFromClose,tsmiALLClose});            cms.Name = "tsmiClose";            cms.Size = new System.Drawing.Size(99, 26);            this.TabPageContextMenuStrip = cms;        }        private void tsmiClose_Click(object sender, EventArgs e)        {            this.Close();        }        private void tsmiALLClose_Click(object sender, EventArgs e)        {            DockContentCollection contents = DockPanel.Contents;            int num = 0;            while (num < contents.Count)            {                if (contents[num].DockHandler.DockState == DockState.Document)                {                    contents[num].DockHandler.Hide();                }                else                {                    num++;                }            }        }        private void tsmiApartFromClose_Click(object sender, EventArgs e)        {            DockContentCollection contents = DockPanel.Contents;            int num = 0;            while (num < contents.Count)            {                if (contents[num].DockHandler.DockState == DockState.Document && DockPanel.ActiveContent != contents[num])                {                    contents[num].DockHandler.Hide();                }                else                {                    num++;                }            }        }    }

双击关闭标签代码 主要是修改 DockPaneStripBase.cs 类里的protected override void WndProc(ref Message m)函数 代码如下

[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]        protected override void WndProc(ref Message m)        {            if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK)            {                base.WndProc(ref m);                int index = HitTest();                if (DockPane.DockPanel.AllowEndUserDocking && index != -1)                {                    IDockContent content = Tabs[index].Content;                    //if (content.DockHandler.CheckDockState(!content.DockHandler.IsFloat) != DockState.Unknown)                    //    content.DockHandler.IsFloat = !content.DockHandler.IsFloat;                    //else                    //    content.DockHandler.Close();                    //实现双击文档选项卡自动关闭                    
if
 (content.DockHandler.HideOnClose)                        content.DockHandler.Hide();//隐藏                    else                        content.DockHandler.Close(); //关闭                       }                return;            }            base.WndProc(ref m);            return;        }

我是这样偷着写代码的。

 

插件的代码使用的是OEA框架里面代码,Logging使用的是SuperSocket代码。

1: 获取指定目录的所有DLL到内存。

2: 在ToolboxFrm界面中加入到OutLookBar控件并显示出来。

WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用

WinForm界面开发之“OutLookBar”工具条

http://sourceforge.net/projects/dockpanelsuite

http://download.csdn.net/detail/luomingui/6290535

http://home.cnblogs.com/group/topic/54686.html 
http://blog.csdn.net/dqvega/article/details/7594923

 技术分享

C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用