日期:2014-05-18  浏览次数:21208 次

有关WeifenLuo.WinFormsUI.Docking.DockPanel的问题
最近想利用WeifenLuo.WinFormsUI.Docking.DockPanel做个活动界面.
主窗体Form1,子窗体Form2
C# code

//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()方法,仍然能正常执行.



------解决方案--------------------
可能是dockpanel的BUG.
建议把匿名函数部分创建的Form提前构造出来.