有关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");//Form2Form2 : 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提前构造出来.