我是所有者 - 在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 );
}
此代码导致堆栈溢出。我怀疑这是因为调整大小是使用不正确的尺寸完成的,迫使控件不断重绘。但是,我不确定如何解决它。我没有正确考虑多余的空间吗?
我应该如何调整标签页眉并使用哪些尺寸?
答案 0 :(得分: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;
}
}