C# 如何在Weifenlo中使用预先存在的表单LoadFromXml?
我继承了一个WinForms应用程序,其中我们使用Weifenlo的Dock管理。我正在尝试使用SaveAsXml和LoadFromXml 如果我每次都对一个新表单满意的话,这很好——一个特定的表单现在需要保持可用状态,我希望能够使用代码将其隐藏在屏幕上 示例应用程序每次都会重新创建控件,所以我不知所措 如果我重新创建控件,它会显示良好。然而,试图使用已经创建的控件是行不通的 加载XML-尝试不起作用:C# 如何在Weifenlo中使用预先存在的表单LoadFromXml?,c#,winforms,dockpanel-suite,C#,Winforms,Dockpanel Suite,我继承了一个WinForms应用程序,其中我们使用Weifenlo的Dock管理。我正在尝试使用SaveAsXml和LoadFromXml 如果我每次都对一个新表单满意的话,这很好——一个特定的表单现在需要保持可用状态,我希望能够使用代码将其隐藏在屏幕上 示例应用程序每次都会重新创建控件,所以我不知所措 如果我重新创建控件,它会显示良好。然而,试图使用已经创建的控件是行不通的 加载XML-尝试不起作用: m_deserializeDockContent = new DeserializeDock
m_deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);
_dockPanel = null;
InitDockPanel(); //Initialize DockPanel to full screen
_dockPanel.LoadFromXml(filepath, m_deserializeDockContent);
在这一点上,我尝试了dispose绕过dockPanel并处理现有表单的dockPanel,但结果似乎没有改变。在网上阅读时,我发现也许阻止关闭可能会有所帮助,但仍然不起作用
处理表单关闭事件的示例:
public ExistingForm()
{
InitializeComponent();
HideOnClose = true;
this.FormClosing += ExistingForm_FormClosing;
}
private void ExistingForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
正在更新LoadXml代码以包括现有的form.DockHandler.Close()代码>,现有表单.DockHandler.Dispose()代码>,或\u dockPanel.Dispose()代码>
这根本不起作用,我得到一个错误,因为表单已被处理
唯一有效的方法是重新创建表单
if (persistString == typeof(ExistingForm).ToString())
return new ExistingForm();
我只是想知道我是否错过了DockHandler的一些处理(没有双关语)。我很失望这是XML格式的,也不太明白为什么没有正确加载。对于其他人来说,答案可能是查看github上的整个开源库并从中找出答案——我走了另一个方向,最终创建了自己的LoadFromJSON。我最终扩展了DockContent类,其中包含一个枚举属性类型,每个扩展表单现在都有自己的属性类型,例如Window1的ContentType=ContentTypeEnum.Window1。有些人可能需要更多,但现在一切都在起作用。它是为我今天的需要量身定做的,所以我必须概括一下才能与大家分享。
if (persistString == typeof(ExistingForm).ToString())
return new ExistingForm();