c# - 确定打开了哪个标签页

标签 c# click tabpage contextmenustrip

我正在尝试获取通过鼠标右键单击的 tabpage,换句话说,就是打开 contextmenustriptabpage .

有一个名为 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;

    }

我还添加了(添加 tabpage 时):

    browserTabControl.TabPages.Insert(browserTabControl.TabCount - 1,WebPage);
    browserTabControl.SelectTab(WebPage);
    browserTabControl.SelectedTab.MouseClick += SelectedTab_MouseClick;

    void SelectedTab_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
            lastpoint = Cursor.Position;
    }

问题是最后一点总是 (0,0) !! 为什么 ? 欢迎任何其他建议的想法 提前谢谢

最佳答案

这些事件处理程序都不会实际运行。不是表单的 OnMouseClick() 方法,因为您实际上并没有右键单击表单。而不是标签页的 MouseClick 事件处理程序,因为您为 TabControl 提供了上下文菜单。所以 lastpoint 为空是预期的结果。

不清楚您希望此上下文菜单如何工作。如果在标签页上右击使用就简单了,销毁选中的页面即可:

    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();
    }

关于c# - 确定打开了哪个标签页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21937155/

相关文章:

c# - UserControl 在放置在窗体上时膨胀?

Java Android - Tab Pager 不重新启动 fragment

c# - MVC 成员资格问题 - C#、EntityFramework

c# - 如何在记录类型中添加默认值? - F#

firebase-cloud-messaging - 无法让 click_action 使用 Web 应用程序/PWA 处理 FCM 通知

events - 在AngularJS中单击“触发”按钮

嵌套方法中的 C# yield

c# - 页面间导航缓慢

Java 托盘图标 : addMouseListener -> distinguish between single click and double click?

.net - 不可见的标签页(标签控件)上的控件返回 Visible = false