转自:http://www.cnblogs.com/yvesliao/archive/2008/08/26/1276609.html
1、当双击Tab时,原先是直接把当前Tab所表示的这个窗体,从主窗体的框架上分离现来,成为一个浮动的窗体。这不是我想要的,我把它改成了双击关闭。 在DockPaneStripBase.cs 的WndProc方法里,对于左键双击消息重新作了处理(下面注释掉的一行是原先的写法,它下面那行是改的):
[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; //这句表示窗口还原初始大小并且脱离任何停靠 if (content.DockHandler.HideOnClose) content.DockHandler.Hide();//隐藏 else content.DockHandler.Close(); //关闭 } return; } base.WndProc(ref m); return; }
2、很多窗体都在Tab中有个右键菜单,右击的里面有关闭,所以最好继承一下DockContent,让其它窗体只要继承这个就有了这个右键菜单
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WeifenLuo.WinFormsUI.Docking { public class DockContentEx : WeifenLuo.WinFormsUI.Docking.DockContent { //在标签上点击右键显示关闭菜单 public DockContentEx() { ContextMenuStrip cms = new System.Windows.Forms.ContextMenuStrip(); ToolStripMenuItem tsmiClose = new System.Windows.Forms.ToolStripMenuItem(); // // cms // tsmiClose.Name = "cms"; tsmiClose.Size = new System.Drawing.Size(98, 22); tsmiClose.Text = "关闭"; tsmiClose.Click += new System.EventHandler(this.tsmiClose_Click); // // tsmiClose // cms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { tsmiClose}); cms.Name = "tsmiClose"; cms.Size = new System.Drawing.Size(99, 26); this.TabPageContextMenuStrip = cms; } private void tsmiClose_Click(object sender, EventArgs e) { this.Close(); } } }