布局控件"WeifenLuo.WinFormsUI.Docking"是一个非常棒的开源控件,用过的人都深有体会,该控件之强大、美观、不亚于商业控件。而且控件使用也是比较简单的。本文介绍如何给 WeifenLuo.WinFormsUI.Docking 控件的标签文档添加双击标题自动关闭事件,方法很简单,只需稍稍修改 WeifenLuo.WinFormsUI.Docking 的代码即可。

DockPaneStripBase的WndProc方法里,对于左键双击消息重新作了处理,我们先找到这段代码,位于 DockPaneStripBase.cs 类文件中,原始代码如下: 

 
  1. [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] 
  2. protected override void WndProc(ref Message m) 
  3.     if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK) 
  4.     { 
  5.         base.WndProc(ref m); 
  6.         int index = HitTest(); 
  7.         if (DockPane.DockPanel.AllowEndUserDocking && index != -1) 
  8.         { 
  9.             IDockContent content = Tabs[index].Content; 
  10.             if (content.DockHandler.CheckDockState(!content.DockHandler.IsFloat) != DockState.Unknown) 
  11.                 content.DockHandler.IsFloat = !content.DockHandler.IsFloat; 
  12.         } 
  13.         return
  14.     } 
  15.     base.WndProc(ref m); 
  16.     return

下面我们只要稍作修改即可,改后的代码:

 
  1. [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] 
  2. protected override void WndProc(ref Message m) 
  3.     if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK) 
  4.     { 
  5.         base.WndProc(ref m); 
  6.         int index = HitTest(); 
  7.         if (DockPane.DockPanel.AllowEndUserDocking && index != -1) 
  8.         { 
  9.             IDockContent content = Tabs[index].Content; 
  10.             if (content.DockHandler.CheckDockState(!content.DockHandler.IsFloat) != DockState.Unknown) 
  11.                 content.DockHandler.IsFloat = !content.DockHandler.IsFloat; 
  12.             //以下两行代码由宜城小子于2010-09-28添加 
  13.             //实现双击文档选项卡自动关闭 
  14.             else 
  15.                 content.DockHandler.Close(); 
  16.         } 
  17.         return
  18.     } 
  19.     base.WndProc(ref m); 
  20.     return

加下划线的那两行代码就是了,呵呵很简单吧!