【问题标题】:how to increase the tabs width to the mouse position如何将标签宽度增加到鼠标位置
【发布时间】:2014-04-04 07:48:18
【问题描述】:

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

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

我正在尝试实现 Internet Explorer(其最新版本)在关闭选项卡时所做的事情;其他标签被扩展(它们的宽度增加)以达到鼠标位置(在标签后关闭标签而不移动鼠标)

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

        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;

第一个代码结果


第二个代码结果:

问题可能是当我将 int/int 相除时,我失去了其余的除法,我可以得到一个 double 结果,但 TabPageWidth 是 int。

【问题讨论】:

    标签: c# devexpress tabcontrol


    【解决方案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();
        }
    }
    

    附:您可以直接联系DevExpress support(我相信这是在使用他们的产品时遇到问题时最好的方法)以获得这方面的官方答复。

    【讨论】:

      【解决方案2】:

      您可以为此使用HeaderAutoFill 功能。这将自动将选项卡填充到客户区;所以用户不需要移动鼠标来关闭多个

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

      【讨论】:

      • 它不适合我的目的,我还有一个我不想扩展它的选项卡(上图中的最后一个选项卡),此外,它不会将选项卡扩展到鼠标位置;我需要移动鼠标关闭...
      • IMO 最后一个不应该是标签,它应该是 CustomHeaderButton 以添加新标签。 PS:我的回答是解决您的问题的替代方法,即开箱即用的东西与您所要求的不完全一样。
      • 如果我删除最后一个选项卡并将其转换为 CustomHeaderButton 会起作用吗?我可以把按钮放在同一个地方吗?
      猜你喜欢
      • 2013-07-18
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多