/******************************************************************
* 创建人:HTL
* 创建时间:2014-7-8 15:37:20
* 说明:WinFormsUI添加右键关闭菜单
* Email:huangyuan413026@163.com
*******************************************************************/
usingSystem;
usingWeifenLuo.WinFormsUI.Docking;
namespace WinForm.BaseForms
{
/// <summary>
/// WinFormsUI添加右键关闭菜单
/// 让其它窗体只要继承这个就有了这个右键菜单,即可关闭窗体
/// </summary>
publicclassDockContentEx:DockContent
{
//在Tag列表上添加右键关闭菜单
publicDockContentEx()
{
System.Windows.Forms.ContextMenuStrip cms =newSystem.Windows.Forms.ContextMenuStrip();
cms.Items.AddRange(newSystem.Windows.Forms.ToolStripItem[]{
newSystem.Windows.Forms.ToolStripMenuItem("关闭", null, tsmiClose_Click,"tsmiClose")
,newSystem.Windows.Forms.ToolStripMenuItem("关闭其他", null, tsmiClose_Click,"tsmiOtherClose")
,newSystem.Windows.Forms.ToolStripMenuItem("全部关闭", null, tsmiClose_Click,"tsmiAllClose")
});
//将右键菜单绑定到DockContent的TabPage上
this.TabPageContextMenuStrip= cms;
//也可以使用这种方式
//this.TabPageContextMenu=newSystem.Windows.Forms.ContextMenu();
}
//菜单事件
privatevoid tsmiClose_Click(object sender,EventArgs e)
{
System.Windows.Forms.ToolStripMenuItem _tsmt = sender as System.Windows.Forms.ToolStripMenuItem;
if(_tsmt == null)return;
switch(_tsmt.Name)
{
case"tsmiClose":this.Close();break;
case"tsmiAllClose":HideOrCloseFrom(true);break;
case"tsmiOtherClose":HideOrCloseFrom();break;
default:break;
}
}
/// <summary>
/// 隐藏其他窗体
/// </summary>
voidHideOrCloseFrom()
{
HideOrCloseFrom(false,false);
}
/// <summary>
/// 隐藏窗体
/// </summary>
/// <param name="isAll">隐藏所有还是其他窗体</param>
voidHideOrCloseFrom(bool isAll)
{
HideOrCloseFrom(isAll,false);
}
/// <summary>
/// 关闭还是隐藏窗体
/// </summary>
/// <param name="isAll">是否是所有窗体,还是除当前窗体以外的其他窗体</param>
/// <param name="isClose">是否是关闭窗体,默认为隐藏窗体</param>
privatevoidHideOrCloseFrom(bool isAll,bool isClose)
{
DockContentCollection contents =DockPanel.Contents;
for(int i =0; i < contents.Count; i++)
{
if(isAll)
{
HideOrCloseFrom(contents[i].DockHandler, isClose);
}//end if
elseif(DockPanel.ActiveContent!= contents[i])
{
HideOrCloseFrom(contents[i].DockHandler, isClose);
}//END ELSE IF
}//end for
}//end HideOrCloseFrom
/// <summary>
/// 关闭或隐藏当前窗体
/// 仅DockState状态跟当前的DockState状态相同的窗体
/// </summary>
/// <param name="content">当前窗体对象</param>
voidHideOrCloseFrom(DockContentHandler content,bool isClose)
{
if(content == null || content.DockState!=this.DockState)return;
if(isClose)
content.Close();
elseif(!content.IsHidden)
content.Hide();
}
}
}

  

主要是利用WinFormsUI的TabPageContextMenuStrip属性或TabPageContextMenu绑定自定义的右键菜单来实现的
//将右键菜单绑定到DockContent的TabPage上
this.TabPageContextMenuStrip= cms;
//也可以使用这种方式
//this.TabPageContextMenu = new System.Windows.Forms.ContextMenu();

  

参考:

http://www.cnblogs.com/luomingui/p/3329763.html

WinFormsUI开源地址:https://github.com/dockpanelsuite/dockpanelsuite

http://blog.yotuo.net/post/2010/09/WeifenLuo.WinFormsUI.Docking_doubleclick_close.html

MSDN MenuItem 类:http://msdn.microsoft.com/zh-cn/library/System.Windows.Forms.MenuItem(v=vs.80).aspx

MSDN ToolStripMenuItem 类:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.toolstripmenuitem(v=vs.80).aspx

WeifenLuo.WinFormsUI.Docking添加关闭功能的更多相关文章

  1. WeifenLuo.WinFormsUI.Docking"的使用

    要用 WeifenLuo.WinFormsUI.Docking 首先要下载: WeifenLuo.WinFormsUI.Docking 在当前工程“解决方案 - 引用”中 >> 右击引用 ...

  2. WeifenLuo.WinFormsUI.Docking.dll的用法

    基本框架 说明 weiFenLuo.winFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库,可以实现像Visual Studio的窗口停靠.拖拽等功能.Weif ...

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

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

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

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

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

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

  6. WeifenLuo.WinFormsUI.Docking"的使用 z

    在伍华聪的博客中,看到布局控件"WeifenLuo.WinFormsUI.Docking",发现的确是一个非常棒的开源控件,用过的人都深有体会,该控件之强大.美观.不亚于商业控件. ...

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

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

  8. WeiFenLuo.winFormsUI.Docking.dll的使用(停靠效果)

    1.  重置工具箱: 新建一个WinForm程序,项目名称为TestDockPanelControl.选中Form1窗体后选择工具箱--->>新建个添加选项卡命名为WeiFenLuo--- ...

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

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

随机推荐

  1. spectre漏洞代码分析-c代码

    下面一句话转自360: 现代处理器(CPU)的运作机制中存在两个用于加速执行的特性,推测执行( Speculative Execution)和间接分支预测(Indirect Branch Predic ...

  2. 「APIO2018选圆圈」

    「APIO2018选圆圈」 题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1, c_2, \ldots, c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径 ...

  3. 更换mac电脑后证书过期的解决办法

    http://stackoverflow.com/questions/32821189/xcode-7-error-missing-ios-distribution-signing-identity- ...

  4. Yii2 init 与 beforeAction 区别

    1.执行顺序 init > beforeAction 2.调用子函数时,两个函数都不会再次执行 3.返回值 init返回false继续执行,beforeAction停止执行 4.执行EXIT,全 ...

  5. poj 1485 dp

    转自:http://www.cnblogs.com/kuangbin/archive/2011/11/12/2246407.html [题目大意] 一条公路上有n个旅馆,选出其中k个设置仓库,一个仓库 ...

  6. Java并发(二):Java内存模型

    一.硬件内存架构 一个现代计算机通常由两个或者多个CPU.其中一些CPU还有多核.每个CPU在某一时刻运行一个线程是没有问题的.如果你的Java程序是多线程的,在你的Java程序中每个CPU上一个线程 ...

  7. JavaScript设计模式与开发实践——读书笔记1.高阶函数(下)

    上部分主要介绍高阶函数的常见形式,本部分将着重介绍高阶函数的高级应用. 1.currying currying指的是函数柯里化,又称部分求值.一个currying的函数会先接受一些参数,但不立即求值, ...

  8. HDU 5645 DZY Loves Balls 水题

    DZY Loves Balls 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5645 Description DZY loves playing b ...

  9. Linux知识(6)----VIM

    vi的第一版是由Bill Joy在1978年写成的,当时他是UC Berkeley的学生.后来他共同创建了神奇的Sun公司.vi来源于visual一词,目标是在终端上可视化地模拟文本的编辑,是的更人性 ...

  10. react-native-communications 电话、短信、邮件、浏览器

    第一种方法:Linking:调用系统的电话.短信.邮件.浏览器等功能 Linking.canOpenURL(this.props.url).then(supported => { if (!su ...