【问题标题】:Stretch tab headers instead of tab pages in tab control when resizing调整大小时在选项卡控件中拉伸选项卡标题而不是选项卡页
【发布时间】:2011-06-21 06:04:56
【问题描述】:

我在winforms 中绘制了一个向左的tabcontrol。

每个标签页都有固定的大小,所以当UI被拉宽时,我希望标签页头的ItemSize宽度相应增加。

    private void tbcTests_Resize( object sender, EventArgs e )
    {
        tbcTests.ItemSize = new Size(
            tbcTests.Width - tbcTests.TabPages[0].Controls[0].Width - tbcTests.Padding.X,
            tbcTests.ItemSize.Height );
    }

此代码导致堆栈溢出。我怀疑这是因为调整大小是使用不正确的尺寸完成的,从而迫使控件不断重绘。但是,我不确定如何解决它。我没有正确计算多余的空间吗?

我应该如何调整标签页标题的大小以及使用什么尺寸?

【问题讨论】:

    标签: c# winforms user-interface


    【解决方案1】:

    更改 ItemSize 属性会导致 Resize 事件再次触发。您需要一个辅助变量来抑制嵌套事件。像这样:

    private bool busySizing;
    
    private void tbcTests_Resize( object sender, EventArgs e )
    {
        if (busySizing) return;
        busySizing = true;
        try {
           tbcTests.ItemSize = new Size(
              tbcTests.Width - tbcTests.TabPages[0].Controls[0].Width - tbcTests.Padding.X,
              tbcTests.ItemSize.Height );
        }
        finally {
           busySizing = false;
        }
    }
    

    【讨论】:

    • 这是有道理的。我明天会尝试,如果/当它有效时,我会投票/接受。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多