如何将标签宽度增加到鼠标位置

时间:2014-04-04 07:48:19

标签: c# devexpress tabcontrol

我正在开发一个依赖webbrowser winform组件的浏览器。

我使用xtratabcontrol来浏览标签(DevExpress组件),标签上有关闭按钮。

我正在尝试在关闭标签时实现Internet Explorer(其上一版本)的功能;其他选项卡被扩展(它们的宽度增加)以达到鼠标poisiton(在选项卡后启用关闭选项卡而不移动鼠标)

这是我添加的代码(在关闭按钮点击事件中)

        Point cursor = MousePosition;
        int x = cursor.X;
        int count = browserTabControl.TabPages.Count -1;// I don't want to include the last tab (which opens another tabs)

        int width = x / count;


        for (int i = 0; i < browserTabControl.TabPages.Count -1 ; i++)
                browserTabControl.TabPages[i].TabPageWidth = width;

我还尝试在删除最后一个标签之前获取标签的整个宽度,然后将其分成新标签计数,并将结果设置为每个标签:

    int current_width = (browserTabControl.TabPages.Count - 1) * browserTabControl.TabPages[0].TabPageWidth;
        //..............some code removing the last tab (actually the tab before the last tab)
        //after removing the last tab
        int count = browserTabControl.TabPages.Count - 1;

        int width = current_width / count;


        for (int i = 0; i < browserTabControl.TabPages.Count - 1; i++)
            browserTabControl.TabPages[i].TabPageWidth = width;

第一个代码结果 the result is not accurate


第二个代码结果:

the result is not accurate

可能问题是当我除去int / int时我失去了除法的其余部分,我可以获得双重结果,但TabPageWidth是int。

2 个答案:

答案 0 :(得分:1)

尝试以下解决方案:

    // Initialization
    foreach(XtraTabPage page in xtraTabControl.TabPages) {
        if(page == addNewTabPage) continue;
        page.TabPageWidth = 100; // turn off headers auto-size
    }
}
void xtraTabControl_CloseButtonClick(object sender, EventArgs e) {
    ClosePageButtonEventArgs ea = e as ClosePageButtonEventArgs;
    if(ea.Page != addNewTabPage) {
        xtraTabControl.BeginUpdate();
        ((XtraTabPage)ea.Page).Dispose();

        int totalWidth = 0;
        var visiblePages =((IXtraTab)xtraTabControl).ViewInfo.HeaderInfo.VisiblePages;
        int totalHeadersGrow = 0;
        for(int i = 0; i < visiblePages.Count; i++) {
            var pageInfo = visiblePages[i];
            if(pageInfo.Page == addNewTabPage) continue;
            totalWidth += pageInfo.Bounds.Width;
            totalHeadersGrow += (pageInfo.Bounds.Width - pageInfo.Page.TabPageWidth);
        }
        int count = xtraTabControl.TabPages.Count - 1;
        int width = totalWidth / count - totalHeadersGrow / (count + 1);
        foreach(XtraTabPage page in xtraTabControl.TabPages) {
            if(page == addNewTabPage) continue;
            page.TabPageWidth = width;
        }
        xtraTabControl.EndUpdate();
    }
}

P.S。您可以直接联系DevExpress support(我相信这是在使用他们的产品时遇到问题的最佳方式),以获得这方面的正式答案。

答案 1 :(得分:0)

您可以使用HeaderAutoFill功能。这会自动将标签填充到客户区;所以用户无需移动鼠标来关闭多个

this.xtraTabControl1.HeaderAutoFill = DevExpress.Utils.DefaultBoolean.True;