自动调整包含TabControl的表单

时间:2013-05-11 14:51:18

标签: c# winforms tabcontrol

我有一个带有一堆控件的Windows窗体,它工作得很好。所有控件都包含在TableLayoutPanel中,根据控件基本大小自动调整,Form根据面板自动调整大小,所以我不必担心不同平台和计算机的大小因为一切都应根据当前配置的设置调整大小。

例如,这是一个简单的例子。 相关代码是:

//...code defining all the other Commands and .Add()'ing them to the Panel
form.Controls.Add(Panel);
form.AutoSize = true;
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.ShowDialog();

Example Dialog

我现在想要获得整个面板并将其放在TabControl中,这样它就是其他许多选项卡上的一个选项卡。我这样做了如下:

//...code defining all the other Commands and .Add()'ing them to the Panel
TabControl tabControl = new TabControl();
tabControl.Dock = DockStyle.Fill;
TabPage tabPage = new TabPage("C1");
tabPage.Controls.Add(Panel);
tabControl.TabPages.Add(tabPage);
form.Controls.Add(tabControl);
form.AutoSize = true;
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.ShowDialog();

基本上,我没有将Panel添加到Form,而是将其添加到TabPage,而TabControl已添加到Form,而AutoSize已添加到TabControl 1}}。但是,这导致: Results http://img51.imageshack.us/img51/685/5112013112725am.jpg

文档指出TabPage.Dock = DockStyles.Fill的{​​{1}}属性仅仅是基础设施,没有相关性。我发现的大多数“解决方案”建议使用TabControl,这有助于Panel现在填写表格,如上所示,而不是只占用它的一小部分。然而,表格本身保持不变。

我曾考虑使用TabControl的大小并使Size的大小等于(或其函数),但我注意到{{1} }参数显然只会在绘制Panel时更改,因为添加控件根本不会更改它,所以我必须等待Panel绘制然后调整大小,这听起来很邋。有更好的解决方案吗?

更新 使用锚定和设置

Panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
tabControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;

简单地说明一下:

http://img803.imageshack.us/img803/3453/5112013125710pm.jpg

2 个答案:

答案 0 :(得分:4)

为什么不利用Anchoring而不是设置尺寸?如果您将Panel / Top | Left | Right | Bottom的{​​{1}}锚定到TabPage,那么将TabControl锚定到TabControl,就像它只有Form一样你需要担心Form的大小。它将决定锚定在其上的所有其他项目的大小。

答案 1 :(得分:-1)

在面板的设计器中使用.AutoScaleMode = None作为usercontrol。 在我的情况下,TabControl-TabPage-myPage可以正常工作。