最近想利用WeifenLuo.WinFormsUI.Docking.DockPanel做个活动界面.
主窗体Form1,子窗体Form2//Form1
Form1.IsMdiContainer = true;//使用dockpanel必须
//包含一个dockpanel控件 dockpanel1//调用1.config文件恢复界面布局
void LoadConfig()
{
try{
dockpanel1.LoadFromXml(Application.StartupPath + "\\1.config",delegate(string str)
{if(str == typeof(Form2))return new Form2();return null;});
}catch
{
}
}//FormClosing事件
dockpanel1.SaveAsXml(Application.StartupPath + "\\1.config");//Form2
Form2 : WeifenLuo.WinFormsUI.Docking.DockContent //子窗体必须
{
DataGridView dgv; //具体代码不写了,已经绑定数据源
public void Test()
{
MessageBox.Show(dgv.CurrentRow.ToString());
}
}
dll下载地址:https://sourceforge.net/projects/dockpanelsuite
主要代码就是这些了,存在的问题就是如果程序是手动设置布局.
例如:
Form2 f = new Form2();
f.Show(dockpanel1);f.Test();
能获取datagridview对象而如果程序启动的时候,利用LoadFromXml创建的Form2,在Form1中调用Form2.Test()方法总是会抛出异常,CurrentRow为null.
但是在Form2中调用Test()方法,仍然能正常执行.
主窗体Form1,子窗体Form2//Form1
Form1.IsMdiContainer = true;//使用dockpanel必须
//包含一个dockpanel控件 dockpanel1//调用1.config文件恢复界面布局
void LoadConfig()
{
try{
dockpanel1.LoadFromXml(Application.StartupPath + "\\1.config",delegate(string str)
{if(str == typeof(Form2))return new Form2();return null;});
}catch
{
}
}//FormClosing事件
dockpanel1.SaveAsXml(Application.StartupPath + "\\1.config");//Form2
Form2 : WeifenLuo.WinFormsUI.Docking.DockContent //子窗体必须
{
DataGridView dgv; //具体代码不写了,已经绑定数据源
public void Test()
{
MessageBox.Show(dgv.CurrentRow.ToString());
}
}
dll下载地址:https://sourceforge.net/projects/dockpanelsuite
主要代码就是这些了,存在的问题就是如果程序是手动设置布局.
例如:
Form2 f = new Form2();
f.Show(dockpanel1);f.Test();
能获取datagridview对象而如果程序启动的时候,利用LoadFromXml创建的Form2,在Form1中调用Form2.Test()方法总是会抛出异常,CurrentRow为null.
但是在Form2中调用Test()方法,仍然能正常执行.
建议把匿名函数部分创建的Form提前构造出来.