在MDI窗体中定义一个
TabControl tabCon = new TabControl();
在MdiChildActivate事件写:代码如下:
private void MainFrame_MdiChildActivate(object sender, EventArgs e)
{
Form f = this.ActiveMdiChild;
if (f == null) { return; }
string key = f.Handle.ToString();
if (!tabCon.TabPages.ContainsKey(key))
{
tabCon.TabPages.Add(key, f.Text);
f.Closed += delegate(Object _sender, EventArgs _e) { tabCon.TabPages.RemoveByKey((_sender as Form).Handle.ToString()); };
}
tabCon.SelectedIndex = tabCon.TabPages.IndexOfKey(key);
}
void tabCon_Selected(Object sender, TabControlEventArgs e)
{
if (e == null || e.TabPage == null)
return;
string key = e.TabPage.Name;
foreach (Form f in this.MdiChildren)
{
if (f.Handle.ToString() == key)
{
f.BringToFront();
break;
}
}
}
private void tabCon_DoubleClick(object sender, EventArgs e)
{
if (this.tabCon.Visible && tabCon.TabCount>0)
{
Form childFrom = this.ActiveMdiChild;
childFrom.Close();
this.RemoveTabPageFromTabCtrl();
}
}
/**/
/// <summary>
/// 在子窗体关闭时移除对应的TabPage
/// </summary>
private void RemoveTabPageFromTabCtrl()
{
for (int i = 0; i < this.tabCon.TabCount; i++)
{
if (this.ActiveMdiChild.Equals(tabCon.TabPages[i].Tag))
{
this.tabCon.TabPages.Remove(this.tabCon.TabPages[i]);
break;
}
}
}