C#中Mdi多窗体工具栏全并控讨
在C# 中,Mdi框架的子窗体菜单可以自动显示到主窗体的菜单栏里,但是子窗体的工具栏在显示的时候是不会自动合并到主窗体的工具栏中的。但我们可以建两个工具栏,然后让子窗体与父窗体各拥有一个ToolBar,当子窗体最大化时,父窗体的ToolBar不再显示,只显示子窗体的ToolBar,并实现父窗体的功能。
下面以开发记事本的多文档软件为例进行说明:
建一主窗体:frmMain,工具栏:Toolbar1
建一子窗体:frmEdit工具栏:Toolbar1
首先在主窗体中建两个方法,分别是显示与隐藏Toolbar,其访问权限为Public
public void ShowToolBar()
{
ToolBar1.Visible = true;
}
public void HideToolBar()
{
ToolBar1.Visible = false ;
}
然后在子窗体中捕捉最大化事件:
private void frmEdit_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Maximized)
{
tlbFileNew.Visible = true;
tlbFileOpen.Visible = true;
tlbFileSave.Visible = true;
((frmMain)this.MdiParent).HideToolBar();
}
}
//注意:C#中没有直接的最大化事件,我们只有捕捉Resize事件,然后判断是不是最大化。
tlbFileNew.Visible = true;
tlbFileOpen.Visible = true;
tlbFileSave.Visible = true;
这三句是为了显示本来应该在主窗体中显的的按钮。由于先前主窗体中工具栏还没有隐藏,因此,这些不能显示出来,故Visible设为FALSE,现在最大化后,主窗体的工具栏隐藏起来了,故这里应该显示出来,并执行被隐藏了的主窗体工具栏的功能。
要实现主窗体的工具栏的功能,可以用以下语句
tlbFileNew.Click +=new EventHandler(((frmMain)this.MdiParent).ToolNew_Click );
tlbFileOpen.Click += new EventHandler(((frmMain)this.MdiParent).ToolOpen_Click);
tlbFileSave.Click += new EventHandler(((frmMain)this.MdiParent).ToolSave_Click);
这个很简单了,就不多说了,到了这里,似乎这一功能已经完成了,但不可粗心,还有一点,当子窗体完全关闭时,主窗体的TOOLBAR要显示出来。
private void frmEdit_FormClosing(object sender, FormClosingEventArgs e)
{
if (((frmMain)this.MdiParent).MdiChildren.Length == 1)
{
((frmMain)this.MdiParent).ShowToolBar();
}
}
到这里,这个功能才真正实现!