C# 确定打开了哪个选项卡页

C# 确定打开了哪个选项卡页,c#,click,tabpage,contextmenustrip,C#,Click,Tabpage,Contextmenustrip,我正在尝试获取鼠标右键单击的选项卡页面,换句话说,就是打开上下文列表的选项卡页面 有一个名为Close的toolstripmenuitem工具,我用它来关闭单击的选项卡 我使用了以下代码: public partial class USBrowser : Form { private Point lastpoint; } private void closeTabToolStripMenuItem_Click(object sender, EventArgs

我正在尝试获取鼠标右键单击的
选项卡页面
,换句话说,就是打开
上下文列表的
选项卡页面

有一个名为Close的
toolstripmenuitem
工具,我用它来关闭单击的选项卡

我使用了以下代码:

public partial class USBrowser : Form

    {
        private Point lastpoint;
    }


private void closeTabToolStripMenuItem_Click(object sender, EventArgs e)
{
    for (int i = 0; i < browserTabControl.TabCount; i++)
    {
        Rectangle rec = browserTabControl.GetTabRect(i);
        if (rec.Contains(this.PointToClient(lastpoint)))
           closeTab(i);//this function closes the tab at specific index                
    }
}

    protected override void OnMouseClick(MouseEventArgs e)
    {
        base.OnMouseClick(e);
        if (e.Button == MouseButtons.Right)
            lastpoint = Cursor.Position;

    }
问题是最后一点总是(0,0)!! 为什么? 任何其他建议都是受欢迎的
thanx预先

这些事件处理程序实际上都不会运行。不是表单的OnMouseClick()方法,因为您实际上不是在表单上单击鼠标右键。而不是tab页的MouseClick事件处理程序,因为您为TabControl提供了上下文菜单。因此,最后一点为空是预期的结果

不清楚您希望此上下文菜单如何工作。如果通过右键单击选项卡页面使用它,则很简单,只需销毁所选页面:

    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
        tabControl1.SelectedTab.Dispose();
    }
如果您通过右键单击未选中的选项卡来激活它,那么它会变得更复杂。您必须记住单击的选项卡,使用上下文菜单的打开事件:

    private TabPage RightClickedTab;

    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) {
        RightClickedTab = tabControl1.SelectedTab;
        var pos = tabControl1.PointToClient(Cursor.Position);
        for (int tab = 0; tab < tabControl1.TabCount; ++tab) {
            if (tabControl1.GetTabRect(tab).Contains(pos)) {
                RightClickedTab = tabControl1.TabPages[tab];
                break;
            }
        }
    }

    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
        if (RightClickedTab != null) RightClickedTab.Dispose();
    }
专用选项卡页面右键单击选项卡;
private void contextMenuStrip1_打开(对象发送方,CancelEventArgs e){
右键单击选项卡=选项卡控件1。选择选项卡;
var pos=tabControl1.PointToClient(游标位置);
对于(int-tab=0;tab
    private TabPage RightClickedTab;

    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) {
        RightClickedTab = tabControl1.SelectedTab;
        var pos = tabControl1.PointToClient(Cursor.Position);
        for (int tab = 0; tab < tabControl1.TabCount; ++tab) {
            if (tabControl1.GetTabRect(tab).Contains(pos)) {
                RightClickedTab = tabControl1.TabPages[tab];
                break;
            }
        }
    }

    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
        if (RightClickedTab != null) RightClickedTab.Dispose();
    }