0

我继承了一个 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 的一些处理(不是双关语)。

4

0 回答 0