我继承了一个 WinForms 应用程序,我们在其中使用 WeifenLuo 进行 Dock 管理。我正在尝试使用 SaveAsXml 和 LoadFromXml。
如果我每次都可以使用新表单,这很好 - 一个特定的表单现在需要保持可用,我希望能够只使用代码来隐藏它。
示例应用程序每次都会重新创建控件,所以我很茫然。
如果我重新创建控件,它显示正常。但是,试图让它使用已经创建的控件是行不通的。
加载 XML - 尝试不起作用:
m_deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);
_dockPanel = null;
InitDockPanel(); //Initialize DockPanel to full screen
_dockPanel.LoadFromXml(filepath, m_deserializeDockContent);
private IDockContent GetContentFromPersistString(string persistString)
{
if (persistString == typeof(ExistingForm).ToString())
return existingForm;
throw new NotImplementedException();
}
在这一点上,我尝试了围绕 _dockPanel 的 dispose 并处理 ExistingForm 的 dockPanel,但似乎没有任何改变结果。在线阅读我发现可能阻止关闭可能会有所帮助,但仍然不起作用。
处理表单关闭事件的示例:
public ExistingForm()
{
InitializeComponent();
HideOnClose = true;
this.FormClosing += ExistingForm_FormClosing;
}
private void ExistingForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
更新 LoadXml 代码以包含 existingForm.DockHandler.Close();
、existingForm.DockHandler.Dispose();
或_dockPanel.Dispose();
这根本不起作用,我收到一个错误,因为表单被处理掉了。
唯一可行的方法是重新创建表单
if (persistString == typeof(ExistingForm).ToString())
return new ExistingForm();
只是想知道我是否缺少对 DockHandler 的一些处理(不是双关语)。