在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; } } }