C# WindowsForms-向选项卡页标题添加关闭按钮

C# WindowsForms-向选项卡页标题添加关闭按钮,c#,windows-forms-designer,C#,Windows Forms Designer,我想在选项卡页面的标题中添加一个关闭按钮。因此,与浏览器选项卡一样,它可以从选项卡控件中删除。 提前感谢您抽出时间 编辑: 现在,我用鼠标中键来处理关闭操作,如下面的代码所示,但我想在tabPage标题上为我的用户提供一个友好的关闭按钮 private void tabControl1_MouseDown(object sender, MouseEventArgs e) { if (e.Button != System.Windows.Fo

我想在选项卡页面的标题中添加一个关闭按钮。因此,与浏览器选项卡一样,它可以从选项卡控件中删除。 提前感谢您抽出时间

编辑:

现在,我用鼠标中键来处理关闭操作,如下面的代码所示,但我想在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;
                }
            }
        }
private void tabControl1\u MouseDown(对象发送方,MouseEventArgs e)
{
if(e.Button!=System.Windows.Forms.MouseButtons.Middle)
返回;
对于(int i=0;i
编辑


我发现我的问题重复了一遍,并且回答正确。

默认的WF
TabControl
没有此功能

您可以在UI上有另一个按钮,使用该按钮可以删除当前选项卡

如果需要在选项卡上设置按钮,则可以重写“OnPaint”方法并自行绘制或使用其他选项卡控件

还有免费选项卡控件:


默认的WF
TabControl
没有此功能

您可以在UI上有另一个按钮,使用该按钮可以删除当前选项卡

如果需要在选项卡上设置按钮,则可以重写“OnPaint”方法并自行绘制或使用其他选项卡控件

还有免费选项卡控件:


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

私有列表关闭按钮=新建列表()
私有void SetTabButtons()
{
//首先删除所有现有按钮

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

私有列表关闭按钮=新建列表()
私有void SetTabButtons()
{
//首先删除所有现有按钮

对于(int i=0;i到目前为止您尝试了什么?在这方面您遇到了哪些问题(是添加按钮、从TabPages集合中删除选项卡还是其他问题)?@Bobsamers我编辑了这个问题。这就是我为了达到这个目标所做的。我的问题是添加关闭按钮。请看一个例子,这是对的,我的朋友。这是一个重复的问题。我有责任在问问题之前搜索更多。请告诉我如何删除它。@Hans Passant到目前为止你做了什么?这是什么方面的您是否遇到问题(是添加按钮、从TabPages集合中删除选项卡还是其他问题)?@Bobsamers我编辑了这个问题。这就是我为了达到这个目标所做的。我的问题是添加关闭按钮。请看一个例子,这是对的,我的朋友。这是一个重复的问题。我有责任在问问题之前搜索更多。请告诉我如何删除它。@Hans Passant谢谢我的朋友。我知道,但我需要一些帮助以任何方式绘制。抱歉,但你没有在问题中写下这一点。你是对的,我的朋友。那是因为重写paint方法是我的最后手段。谢谢我的朋友。我知道,但我需要一些帮助来绘制它。抱歉,但你没有在问题中写下这一点。你是对的,我的朋友。那是因为重写paint方法是错误的我的最后手段。
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() ;
  }