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

Mla*_*vic 8 c# winforms

有没有简单的(5行代码)方法来做到这一点?

Sam*_*uel 21

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

确保事件已连线
this.tabControl1.MouseClick += tabControl1_MouseClick;
Run Code Online (Sandbox Code Playgroud) 而对于处理程序本身
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());
  }
}
Run Code Online (Sandbox Code Playgroud) 如果你正在争取最少量的线路,这里就是一行
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()); } };
Run Code Online (Sandbox Code Playgroud)


ale*_*etr 6

没有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);
    }
}
Run Code Online (Sandbox Code Playgroud)