#region using System.Windows.Forms; using CSFrameworkV5.Core; #endregion namespace CSFrameworkV5.Business { /// /// 观察用户是否关闭所有子窗体, 如果用户关闭了所有子窗体,显示MDI主窗体的按钮. /// public class ObserverCloseAllChild : IObserver { private Form _mdi; public ObserverCloseAllChild(Form mdi) { _mdi = mdi; } public string Name => "观察子窗体完全关闭"; //如果用户关闭所有子窗体,显示MDI主窗体上的按钮 public void Notify() { if (_mdi.MdiChildren.Length == 0) (_mdi as IMdiForm).RegisterMdiButtons(); else if (_mdi.MdiChildren.Length == 1) if (_mdi.MdiChildren[0] is IMdiChildForm) if ((_mdi.MdiChildren[0] as IMdiChildForm).IsClosing) (_mdi as IMdiForm).RegisterMdiButtons(); } } /// /// 观察当前子窗体,在MDI主窗体内显示子窗体的标题 /// public class ObserverFormState : IObserver { private ToolStripStatusLabel _label; private Form _mdi; public ObserverFormState(Form mdi, ToolStripStatusLabel label) { _mdi = mdi; _label = label; } public string Name => "观察当前子窗体"; public void Notify() { var child = _mdi.ActiveMdiChild; if (child != null) { if (child is IMdiChildForm) { if ((child as IMdiChildForm).IsClosing) _label.Text = _mdi.Text; else _label.Text = child.Text; } else { _label.Text = child.Text; } } else { _label.Text = "没有打开子窗体."; } } } /// /// 观察打个的窗体个数. /// public class ObserverOpenForms : IObserver { private ToolStripStatusLabel _label; private Form _mdi; public ObserverOpenForms(Form mdi, ToolStripStatusLabel label) { _mdi = mdi; _label = label; } public string Name => "观察打个的窗体个数"; public void Notify() { //计算打开的子窗体个数,因Application.OpenForms.Count是所有打开的窗体数量,要减掉MDI主窗体. var count = Application.OpenForms.Count - 1; if (count < 0) count = 1; _label.Text = string.Format("共打开{0}个窗体", count); } } }