接上一篇博文:《将重构进行到底-主窗口管理》
上篇博文,小菜介绍了在项目开发中一个很简单而常见的主窗口管理的代码重构例子,最终得到一个不错的解决方案,但是最近小菜发现了一处小bug,模态窗口不可设置MdiParent属性,
再次重构的代码如下:并且该段代码不可放在窗体构造函数,因为Modal属性是窗口show之后被设置的,所以,以目前的情况,下面代码是最安全有效的。
protected override void OnShown(EventArgs e)
{
//此处需要判断窗口是否是模态打开
//模态窗口不可设置MdiParent
if (!this.Modal)
{
//顶层窗口存在
Form parent = Application.OpenForms[0];//此处OpenForms.Count总是>0
//如果顶级窗口是MdiContainer,并且当前窗口不是MdiContainer
if (parent.IsMdiContainer && !this.IsMdiContainer)
{
this.MdiParent = parent;
}
}
}
最后,一点感悟:重构是伴随开发全生命周期的,而不是阶段性的,否则代码会腐烂到无法忍受。