WindowsForms - 向TabPage标题添加关闭按钮

时间:2015-08-05 16:54:15

标签: c# windows-forms-designer

我想在我的TabPages标题中添加一个关闭按钮。因此,与浏览器标签一样,它可以从TabControl中删除。 提前感谢您的时间。

编辑:

现在,我用中间点击处理结束,如下面的代码,但我想在tabPage标题上为我的用户提供一个友好的关闭按钮。

        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

2 个答案:

答案 0 :(得分:0)

默认WF TabControl没有此功能。

您的UI上可以有另一个按钮,您可以删除当前标签。

如果需要在选项卡上显示按钮,则可以覆盖“OnPaint”方法并自行绘制或使用antoher选项卡控件。

还有免费的标签控件:

A TabControl with tab page closing capability

Firefox-like subclassed TabControl and TabPage

答案 1 :(得分:0)

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

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() ;
  }