Windows 窗体 - 向 TabPage 添加一个关闭按钮 header

WindowsForms - add a close button to TabPage header

我想向 header 我的 TabPages 添加一个关闭按钮。因此,就像浏览器选项卡一样,它可以从 TabControl 中删除。 预先感谢您的宝贵时间。

编辑:

现在,我像下面的代码一样通过中键单击来处理关闭,但我想在 tabPage header.

上为我的用户提供一个友好的关闭按钮
        private void tabControl1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button != System.Windows.Forms.MouseButtons.Middle)
                return;

            for (int i = 0; i < MainTabControl.TabPages.Count; i++)
            {
                if (this.MainTabControl.GetTabRect(i).Contains(e.Location))
                {
                    this.MainTabControl.TabPages.RemoveAt(i);
                    return;
                }
            }
        }

编辑

我发现我的问题被重复并正确回答 there

默认 WF TabControl 没有此功能。

您的 UI 上可以有另一个按钮,这样您就可以删除当前选项卡。

如果需要在选项卡上有按钮,你可以覆盖"OnPaint"方法并自己绘制或使用其他选项卡控件。

还有免费的选项卡控件:

A TabControl with tab page closing capability

Firefox-like subclassed TabControl and TabPage

您可以通过调用此过程(未测试)在每个选项卡上添加一个关闭按钮:

private List<Button> closeButtons = new List<Button>()

private void SetTabButtons()
{
  // first remove all existing buttons
  for (int i=0;i<closeButtons.Count;i++) closeButtons[i].Parent=null ;
  closeButtons.Clear() ; 
  // create the close buttons
  for (int i=0;i<theTabControl.TabPages.Count;i++) 
  {
    // add some spaces to tab text for the close button
    theTabControl.TabPages[i].Text = theTabControl.TabPages[i].Text+"     "  ;
    Rectangle rect=theTabControl.GetTabRect(i);
          NewControl.Location = new System.Drawing.Point(X, Y);
    Button b = new Button() ;
    button.Text = "x" ;
    button.AutoSize = true;
    button.Location = new Point(rect.Right-button.Width-3,rect.top+3) ; 
    button.Parent   = theTabControl ;
    button.tag      = i ;
    button.Click   +=CloseTab_ButtonClick ;
    closeButtons.Add(button) ;
  }

  private void CloseTab_ButtonClick(object sender, EventArgs e) 
  { 
    int theTabPageIndex = (int)((Button)sender).Tag) ;
    // remove the tabpage here 
    ...
    // reset the buttons
    setTabButtons() ;
  }