#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);
}
}
}