Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Weifenlo中使用预先存在的表单LoadFromXml?_C#_Winforms_Dockpanel Suite - Fatal编程技术网

C# 如何在Weifenlo中使用预先存在的表单LoadFromXml?

C# 如何在Weifenlo中使用预先存在的表单LoadFromXml?,c#,winforms,dockpanel-suite,C#,Winforms,Dockpanel Suite,我继承了一个WinForms应用程序,其中我们使用Weifenlo的Dock管理。我正在尝试使用SaveAsXml和LoadFromXml 如果我每次都对一个新表单满意的话,这很好——一个特定的表单现在需要保持可用状态,我希望能够使用代码将其隐藏在屏幕上 示例应用程序每次都会重新创建控件,所以我不知所措 如果我重新创建控件,它会显示良好。然而,试图使用已经创建的控件是行不通的 加载XML-尝试不起作用: m_deserializeDockContent = new DeserializeDock

我继承了一个WinForms应用程序,其中我们使用Weifenlo的Dock管理。我正在尝试使用SaveAsXml和LoadFromXml

如果我每次都对一个新表单满意的话,这很好——一个特定的表单现在需要保持可用状态,我希望能够使用代码将其隐藏在屏幕上

示例应用程序每次都会重新创建控件,所以我不知所措

如果我重新创建控件,它会显示良好。然而,试图使用已经创建的控件是行不通的

加载XML-尝试不起作用:

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();