概述

转自 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菜单工具并加入 关闭 全部关闭 除此之外全部关闭 三个菜单。项目结构如下

组件结构图:

源代码如下:

  1. /// <summary>
  2. /// 很多窗体都在Tab中有个右键菜单,右击的里面有关闭,所以最好继承一下DockContent,
  3. /// 让其它窗体只要继承这个就有了这个右键菜单
  4. /// </summary>
  5. public class DockContentEx : DockContent
  6. {
  7. //在标签上点击右键显示关闭菜单
  8. public DockContentEx( )
  9. {
  10. System.Windows.Forms.ContextMenuStrip cms = new System.Windows.Forms.ContextMenuStrip();
  11. //
  12. // tsmiClose
  13. //
  14. System.Windows.Forms.ToolStripMenuItem tsmiClose = new System.Windows.Forms.ToolStripMenuItem();
  15. tsmiClose.Name = "cms";
  16. tsmiClose.Size = new System.Drawing.Size(98, 22);
  17. tsmiClose.Text = "关闭";
  18. tsmiClose.Click += new System.EventHandler(this.tsmiClose_Click);
  19. //
  20. // tsmiALLClose
  21. //
  22. System.Windows.Forms.ToolStripMenuItem tsmiALLClose = new System.Windows.Forms.ToolStripMenuItem();
  23. tsmiALLClose.Name = "cms";
  24. tsmiALLClose.Size = new System.Drawing.Size(98, 22);
  25. tsmiALLClose.Text = "全部关闭";
  26. tsmiALLClose.Click += new System.EventHandler(this.tsmiALLClose_Click);
  27. //
  28. // tsmiApartFromClose
  29. //
  30. System.Windows.Forms.ToolStripMenuItem tsmiApartFromClose = new System.Windows.Forms.ToolStripMenuItem();
  31. tsmiApartFromClose.Name = "cms";
  32. tsmiApartFromClose.Size = new System.Drawing.Size(98, 22);
  33. tsmiApartFromClose.Text = "除此之外全部关闭";
  34. tsmiApartFromClose.Click += new System.EventHandler(this.tsmiApartFromClose_Click);
  35. //
  36. // tsmiClose
  37. //
  38. cms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
  39. tsmiClose,tsmiApartFromClose,tsmiALLClose});
  40. cms.Name = "tsmiClose";
  41. cms.Size = new System.Drawing.Size(99, 26);
  42. this.TabPageContextMenuStrip = cms;
  43. }
  44. private void tsmiClose_Click(object sender, EventArgs e)
  45. {
  46. this.Close();
  47. }
  48. private void tsmiALLClose_Click(object sender, EventArgs e)
  49. {
  50. DockContentCollection contents = DockPanel.Contents;
  51. int num = 0;
  52. while (num < contents.Count)
  53. {
  54. if (contents[num].DockHandler.DockState == DockState.Document)
  55. {
  56. contents[num].DockHandler.Hide();
  57. }
  58. else
  59. {
  60. num++;
  61. }
  62. }
  63. }
  64. private void tsmiApartFromClose_Click(object sender, EventArgs e)
  65. {
  66. DockContentCollection contents = DockPanel.Contents;
  67. int num = 0;
  68. while (num < contents.Count)
  69. {
  70. if (contents[num].DockHandler.DockState == DockState.Document && DockPanel.ActiveContent != contents[num])
  71. {
  72. contents[num].DockHandler.Hide();
  73. }
  74. else
  75. {
  76. num++;
  77. }
  78. }
  79. }
  80. }

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

  1. [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
  2. protected override void WndProc(ref Message m)
  3. {
  4. if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK)
  5. {
  6. base.WndProc(ref m);
  7.  
  8. int index = HitTest();
  9. if (DockPane.DockPanel.AllowEndUserDocking && index != -1)
  10. {
  11. IDockContent content = Tabs[index].Content;
  12. //if (content.DockHandler.CheckDockState(!content.DockHandler.IsFloat) != DockState.Unknown)
  13. // content.DockHandler.IsFloat = !content.DockHandler.IsFloat;
  14. //else
  15. // content.DockHandler.Close();
  16.  
  17. //实现双击文档选项卡自动关闭

if

  1. (content.DockHandler.HideOnClose)
  2. content.DockHandler.Hide();//隐藏
  3. else
  4. content.DockHandler.Close(); //关闭
  5. }
  6.  
  7. return;
  8. }
  9.  
  10. base.WndProc(ref m);
  11. return;
  12. }

我是这样偷着写代码的。

插件的代码使用的是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” 使用的更多相关文章

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

    概述      最近几天一直在关注WinFrom方面的文章主要还是园子里伍华聪的博客,在看看我们自己写的项目差不忍赌啊,有想着提炼一下项目的公共部分,公共部分有分为 界面,类库两方面,今天主要是把界面 ...

  2. WinFrom界面框架之WeifenLuo.WinFormsUI.Docking + OutLookBar

    本文转载:http://www.cnblogs.com/luomingui/p/3329763.html WeifenLuo.WinFormsUI.Docking + OutLookBar结合使用的效 ...

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

    WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用 转自:http://www.cnblogs.com/wuhuacong/arch ...

  4. WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (二)

    WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (二) 编写人:CC阿爸 2015-1-29 今天我想与大家继续一起分享这一伟大的控件.有兴趣的同 ...

  5. WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (一)

    WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (一) 编写人:CC阿爸 2015-1-28 在伍华聪的博客中,看到布局控件"Weife ...

  6. 学习winform第三方界面weiFenLuo.winFormsUI.Docking.dll

    控件dockpanel中提供了几个可用的类, 重要的有两个, 一是DockPanel, 一是DockContent, DockPanel是从panel继承出来的, 用于提供可浮动的dock的子窗口进行 ...

  7. Winform中DockPanel(引用WeifenLuo.WinFormsUI.Docking.dll组件)的使用

    WeiFenLuo.WinFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库,可实现像Visual Studio的窗口停靠.拖拽等功能.WeifenLuo.Win ...

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

    布局控件"WeifenLuo.WinFormsUI.Docking"是一个非常棒的开源控件,用过的人都深有体会,该控件之强大.美观.不亚于商业控件.而且控件使用也是比较简单的. 实 ...

  9. 开源布局控件 WeifenLuo.WinFormsUI.Docking.dll使用

    WeifenLuo.WinFormsUI.Docking是一个很强大的界面布局控件,可以保存自定义的布局为XML文件,可以加载XML配置文件.! 先看一下效果 使用说明: 1.新建一个WinForm程 ...

随机推荐

  1. 分布式代码管理 tortoisehg mercurial

    下载客户端:            https://bitbucket.org/tortoisehg/files/downloads mercurial客户端下载:http://mercurial.s ...

  2. 【jquery】jquery.cookie.js 的使用指南

    之前有写过一篇原生 js 的 cookie 介绍,并且最后封装成 cookie.js 具体内容点击传送门. jquery.cookie.js 是一款轻量级的 cookie 插件,可以读取,写入和删除 ...

  3. iOS开发——iOS学习路线

    iOS学习路线 版权声明:欢迎转载,请贴上源地址:http://www.cnblogs.com/iCocos/(iOS梦工厂) 一:自学初步学习路线 二:高级完整学习路线 三:完整知识与能力体系 思维 ...

  4. Unity5网络模块UNet介绍

    前段时间,研究了一下UNet,经过项目实践,大致整理了下遇到的问题. 源码Bitbucket:需要说明的是,这个项目只包含上层的包装,一些低层的网络实现在Unity内部,如NetworkTranspo ...

  5. Android WebView Demo

    activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android& ...

  6. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  7. ctex moderncv版本更新--用latex写一个漂亮的简历

    我的电脑是win7系统32位,ctex版本是v2.9.2.164 full(http://www.ctex.org/CTeXDownload) 一直不太清楚moderncv里面类似\cventry这种 ...

  8. CSS HACK 及常见问题

    一.CSS常用hack 1.方式一:条件注释法 这种方式是IE浏览器专有的Hack方式,微软官方推荐使用的hack方式.举例如下 只在IE下生效 <!--[if IE]> 这段文字只在IE ...

  9. NHibernate 使用CreateSQLQuery进行查询

    涉及的表:Cake{Id ,CakeName } CakeSize{ CakeId,-为外键,对应Cake表的字段Id Size } (其中ISession session = NHibernateH ...

  10. Shader Overview

    Unity有三种形式的Shader: (1)Surface Shaders:对光照管线的高层抽象,受光照和影子效果影响的shader,使用Cg/HLSL语言编写:不进行light相关操作的shader ...