代码之家  ›  专栏  ›  技术社区  ›  Mladen Mihajlovic

使用鼠标中键关闭winforms选项卡控件上的选项卡

  •  8
  • Mladen Mihajlovic  · 技术社区  · 17 年前

    有什么简单的方法(5行代码)可以做到这一点吗?

    4 回复  |  直到 17 年前
        1
  •  21
  •   Samuel    17 年前

    删除鼠标中键单击的选项卡的最短代码是使用LINQ。

    确保活动已连接
    this.tabControl1.MouseClick += tabControl1_MouseClick;
    
    private void tabControl1_MouseClick(object sender, MouseEventArgs e)
    {
      var tabControl = sender as TabControl;
      var tabs = tabControl.TabPages;
    
      if (e.Button == MouseButtons.Middle)
      {
        tabs.Remove(tabs.Cast<TabPage>()
                .Where((t, i) => tabControl.GetTabRect(i).Contains(e.Location))
                .First());
      }
    }
    
    如果你在争取最少的行数,这里是一行
    tabControl1.MouseClick += delegate(object sender, MouseEventArgs e) { var tabControl = sender as TabControl; var tabs = tabControl.TabPages; if (e.Button == MouseButtons.Middle) { tabs.Remove(tabs.Cast<TabPage>().Where((t, i) => tabControl.GetTabRect(i).Contains(e.Location)).First()); } };
    
        2
  •  6
  •   alexey_detr    16 年前

    没有LINQ的解决方案不仅紧凑美观,而且实用:

    private void TabControlMainMouseDown(object sender, MouseEventArgs e)
    {
        var tabControl = sender as TabControl;
        TabPage tabPageCurrent = null;
        if (e.Button == MouseButtons.Middle)
        {
            for (var i = 0; i < tabControl.TabCount; i++)
            {
                if (!tabControl.GetTabRect(i).Contains(e.Location))
                    continue;
                tabPageCurrent = tabControl.TabPages[i];
                break;
            }
            if (tabPageCurrent != null)
                tabControl.TabPages.Remove(tabPageCurrent);
        }
    }
    
        3
  •  2
  •   jimjim    15 年前

    没有足够的点数来对提供的解决方案发表评论,但它们都有相同的缺陷:删除的选项卡中的控件未发布。

    当做

        4
  •  -1
  •   ryanulit    17 年前

    您可以这样做:

    private void tabControl1_MouseClick(object sender, MouseEventArgs e)
    {
         if (e.Button == MouseButtons.Middle)
         {
              // choose tabpage to delete like below
              tabControl1.TabPages.Remove(tabControl1.TabPages[0]);
         }
    }