public async Task <bool> RemoveAllAsync(TabPage RemainingPage = null) { bool allClosed = true; IsBusy = true; _isBusyForce = true; for (int i = TabPages.Count - 1; i >= 0; i--) { TabPage Page = TabPages[i]; if (Page == RemainingPage) { continue; } if (!NotCloseableTabs.Contains(Page.Name)) { if ((await RemoveTabAsync(Page)) == false) { allClosed = false; } } } _isBusyForce = false; IsBusy = false; if (RemainingPage != null) { SelectedTab = RemainingPage; } return(allClosed); }
/// <summary> /// This event is getting called when user clicks on the tab. /// The menu shows entries for closing tab and for quick switching. /// </summary> private void MenuOpeningEvent(object sender, System.ComponentModel.CancelEventArgs e) { if (IsBusy) { e.Cancel = true; return; } _hoveredPage = null; int items = ContextMenuStrip.Items.Count; for (int i = 0; i < items - menuIndexOffset; i++) { ContextMenuStrip.Items.RemoveAt(menuIndexOffset); } if (TabPages.Count > 1) { ContextMenuStrip.Items.Add(new ToolStripSeparator()); } for (int i = 0; i < TabPages.Count; i++) { if (TabPages[i] != SelectedTab) { ToolStripMenuItem item = new ToolStripMenuItem(TabPages[i].Text); item.Name = TabPages[i].Name; item.Click += TabShortCut_Click; if (!string.IsNullOrEmpty(TabPages[i].ImageKey)) { item.Image = ImageList.Images[TabPages[i].ImageKey]; } ContextMenuStrip.Items.Add(item); } if (GetTabRect(i).Contains(PointToClient(Cursor.Position))) { _hoveredPage = TabPages[i]; } } if (_hoveredPage == null || NotCloseableTabs.Contains(_hoveredPage.Name)) { e.Cancel = true; } }