2011-06-20 77 views
0

我是拥有者在winforms中绘制左向导tabcontrol。在调整大小时在选项卡控件中拉伸选项卡标题而不是选项卡页面

每个tabpage都有一个固定的大小,所以当UI被拉长的时候,我希望tab标头的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); 
    } 

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

我该如何调整标签页眉的大小和使用什么尺寸?

回答

2

更改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; 
    } 
} 
+0

这很有道理。我会明天尝试,如果/当它工作,upvote/accept。谢谢。 – user664939

相关问题