WeifenLuo.WinFormsUI.Docking添加關閉功能


/******************************************************************
* 創建人: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM