zoukankan      html  css  js  c++  java
  • C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用

    概述

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

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

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

    image

    WeifenLuo.WinFormsUI.Docking修改记录

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

    image

    组件结构图:

    image

    源代码如下:

    复制代码
    /// <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

     btn_download[1]

  • 相关阅读:
    一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483
    HDU
    UVA-796 Critical Links 找桥
    HDU 4612 Warm up
    2017 ICPC乌鲁木齐 A Coins 概率dp
    HDU6223 Infinite Fraction Path bfs+剪枝
    Java基础知识学习(一)
    算法(一)
    面试题整理:SQL(二)
    面试题整理:SQL(一)
  • 原文地址:https://www.cnblogs.com/endv/p/4199605.html
Copyright © 2011-2022 走看看