[转]WeifenLuo.WinFormsUI.Docking——DockPanel的一点点改进

转自: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();
        }
    }
}
原文地址:https://www.cnblogs.com/liul21cn/p/3055068.html