DockPanel Suite是一个开源项目,其主页为http://sourceforge.net/projects/dockpanelsuite/,提供了DockPanel控件程序集以及源文件的下载。
项目要引用WeifenLuo.WinFormsUI.Docking.dll,这个程序集包含了控件及相关类。
需要在DockPanel控件中显示的子窗体(多标签,停靠,自动隐藏)必须继承自WeifenLuo.WinFormsUI.Docking. DockContent类;DockContent重载了窗体的show方法,所以继承自DockContent的子窗体能把自己以指定方式显示在指定的DockPanel区域内;放置了DockPanel的窗体就为父窗体,需要把父窗体的IsMdiContainer属性设为true。
DockPanel的SaveAsXml方法,能以XML形式,把Panel内所有子窗体的显示状态信息保存至指定的本地文件。DockPanel的LoadFromXml方法,能读取之前保存的子窗体信息,再根据使用者提供的相应处理方法,把子窗体恢复到之前状态。
using WeifenLuo.WinFormsUI.Docking;
....................................
.....................................
/// <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;
}
}