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