DockPanel的一个异常BUG【DockPanel Suite2.4 存在BUG】
补充:从发现下文描述的异常之后,在使用时发现,当一个DockContent窗体添加到DockPanel中,先打开,再关闭 然后改变主窗体大小时,会使其他未关闭的DockContent窗口消失,不暴任何异常,
非常诡异的一个错误,出现在DockPanel SUite 2.4中, 改用2.3后没有发现本文描述的任何问题!
异常产生场景描述如下:
DockPanel中添加一个 DockContent窗体,窗体的HideOnClose属性设置为true
当反复点击DockContent窗体的关闭按钮时触发异常;
异常代码位于DockPanel代码第498行
NestedDockingStatus.NestedPanes.Remove(this);
多次点击DockContent关闭按钮时,此处NestedPanes会产生为NULL的异常
修改方法为添加一个判断,如下完整函数:
internal void CloseContent(IDockContent content)
{
DockPanel dockPanel = DockPanel;
dockPanel.SuspendLayout(true);
if (content == null)
return;
if (!content.DockHandler.CloseButton)
return;
if (content.DockHandler.HideOnClose)
{
content.DockHandler.Hide();
if (NestedDockingStatus.NestedPanes!=null) //修改位置
NestedDockingStatus.NestedPanes.Remove(this);
}
else
content.DockHandler.Close();
dockPanel.ResumeLayout(true, true);
}
{
DockPanel dockPanel = DockPanel;
dockPanel.SuspendLayout(true);
if (content == null)
return;
if (!content.DockHandler.CloseButton)
return;
if (content.DockHandler.HideOnClose)
{
content.DockHandler.Hide();
if (NestedDockingStatus.NestedPanes!=null) //修改位置
NestedDockingStatus.NestedPanes.Remove(this);
}
else
content.DockHandler.Close();
dockPanel.ResumeLayout(true, true);
}