实现仿Visual Studio风格的控件DockPanel

       DockPanel Suite是一个开源项目,其主页为http://sourceforge.net/projects/dockpanelsuite/,提供了DockPanel控件程序集以及源文件的下载。

    项目要引用WeifenLuo.WinFormsUI.Docking.dll,这个程序集包含了控件及相关类。

       需要在DockPanel控件中显示的子窗体(多标签,停靠,自动隐藏)必须继承自WeifenLuo.WinFormsUI.Docking. DockContent类;DockContent重载了窗体的show方法,所以继承自DockContent的子窗体能把自己以指定方式显示在指定的DockPanel区域内;放置了DockPanel的窗体就为父窗体,需要把父窗体的IsMdiContainer属性设为true

       DockPanelSaveAsXml方法,能以XML形式,把Panel内所有子窗体的显示状态信息保存至指定的本地文件。DockPanelLoadFromXml方法,能读取之前保存的子窗体信息,再根据使用者提供的相应处理方法,把子窗体恢复到之前状态。

using WeifenLuo.WinFormsUI.Docking;

....................................

.....................................

扫描二维码关注公众号,回复: 11273445 查看本文章

        /// <summary>

        /// 配置文件的路径

        /// </summary>

        private string m_strConfigFile;

        /// <summary>

        /// 这个委托指向实例化子窗体的方法

        /// </summary>

        private DeserializeDockContent m_deserializeDockContent;

        public MainForm()

        {

            InitializeComponent();

            m_strConfigFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockPanel.config");

            m_deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);

        }

 

        private void MainForm_Load(object sender, EventArgs e)

        {

            if (File.Exists(m_strConfigFile))

            {

                dockPanel1.LoadFromXml(m_strConfigFile, m_deserializeDockContent);

            }

        }

 

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)

        {

            dockPanel1.SaveAsXml(m_strConfigFile);           

        }

 

        /// <summary>

        /// 实例化子窗体

        /// </summary>

        private IDockContent GetContentFromPersistString(string persistString)

         {

              if (persistString == typeof(FormA).ToString())

            {

                   return FormA.Instance;

            }

              else if (persistString == typeof(FormB).ToString())

            {

                   return FormB.Instance;

            }

              else

              {

                // 可以在这里处理需要从外部加载数据的其它子窗体

                   return null;

              }

         }

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/wzp1986/article/details/4650190