1

我正在尝试在 Windows 表单应用程序中构建 Web 浏览器。我在上下文菜单中添加了关闭选项卡的选项。我不希望在右键单击时选择标签页,只需要出现上下文菜单。这很好用。问题是当我单击关闭选项卡时,前一个选项卡关闭,而不是当前选项卡,因为上一个选项卡是被选中的选项卡。我试图通过获取标签页的矩形位置来解决这个问题,但对于所有标签来说似乎都是一样的。请帮忙!

    //this is my event handler for closing the tab
    private void closeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        this.tabControlBrowser.TabPages.Remove(this.tabControlBrowser.SelectedTab);   
    }
4

2 回答 2

2

是的,您是正确的,那是因为您正在使用

this.tabControlBrowser.TabPages.Remove(this.tabControlBrowser.SelectedTab); 

这将删除当前选定的选项卡,但不会删除您单击的选项卡页。

请尝试以下代码,希望它能帮助您继续前进

TabPage _ClickedTab;
    public Form1()
    {
        InitializeComponent();
        this.tabControl1.MouseClick += new MouseEventHandler(tabControl1_MouseClick);

    }

    void tabControl1_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            this.contextMenuStrip1.Show(this.tabControl1, e.Location);


            Rectangle r2 = this.tabControl1.GetTabRect(0);

            foreach (TabPage item in this.tabControl1.TabPages)
            {
                Rectangle r = this.tabControl1.GetTabRect(tabControl1.TabPages.IndexOf(item));
                if (r.X < e.Location.X && e.Location.X < r.X + r.Width && r.Y < e.Location.Y && e.Location.Y < r.Y + r.Height)
                {
                    _ClickedTab = item;
                }

            }


        }
    }


    private void toolStripMenuItem3_Click(object sender, EventArgs e)
    {
        this.tabControl1.TabPages.Remove(_ClickedTab);
    }
于 2012-10-07T19:41:15.157 回答
0

您可以针对 TabControl#GetTabRect 返回的矩形测试鼠标的位置

于 2012-10-07T20:01:42.080 回答