有没有办法在Winforms TabControl中获取TabPage的边界?

时间:2011-09-29 20:38:06

标签: c# .net winforms tabcontrol tabpage

我的表单只有一个TabControl,有很多标签,每个标签只有方形按钮并排。我试图这样做,以便当用户点击选项卡时,表单会自行调整大小,您可以在其中查看特定选项卡中的所有按钮或可以查看所有选项卡的大小,以较大者为准。 / p>

我很好奇是否有办法查询标签页中最后一个控件的位置?所以我可以这样做:

tabForm.Width = currentTabPage.UsedContentBorder + 10;

或者我必须通过添加所有控件和它们之间的大小来实现这一点吗?

1 个答案:

答案 0 :(得分:2)

您想要找出特定标签中所有控件的最大坐标吗? LINQ很容易:

int right = tab.Controls.Cast<Control>().Max(c => c.Right);
int bottom = tab.Controls.Cast<Control>().Max(c => c.Bottom);

现在,为了正确选择表单的大小,我想你只需要弄清楚Form的大小比它的TabPages大......我猜这样的东西:

int extraWidth = form.Width - tabControl.SelectedTab.Width;
int extraHeight = form.Height - tabControl.SelectedTab.Height;

然后你就做了

form.Size = new Size(right + extraWidth, bottom + extraHeight);

(如果TabControl的Anchor属性设置为全部四边,TabControl将自动调整大小。)如果用户将表单调整得非常小,我可能会出现故障......您可以补偿通过在Form.Load事件中计算extraWidth和extraHeight,然后在以后需要时保存这些值。