包含TabControl的自动调整表格
我有一个Windows窗体,有一堆控件,它工作得很好。所有控件都包含在一个TableLayoutPanel
中,根据控件的基本尺寸自动调整大小,Form
根据面板进行自动调整,所以我不必担心不同平台和计算机的尺寸,因为一切都应根据当前尺寸调整大小配置的设置。包含TabControl的自动调整表格
例如,下面是一个简单的例子。 相关的代码是:
//...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();
我现在想这整个面板,并把它放在一个TabControl内,所以,它仅仅是一个标签amonst等等。我这样做如下:
//...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
,我把它添加到被添加到被添加到Form
的TabControl
的TabPage
。然而,这会导致: Results http://img51.imageshack.us/img51/685/5112013112725am.jpg
的文档指出AutoSize
属性TabControl
和TabPage
是没有意义单纯的基础设施。我发现的大多数“解决方案”都建议使用.Dock = DockStyles.Fill
,这有助于TabControl
现在填写上面的表单,而不是占用更小的一部分。然而,表格本身保持不变。
我想过使用Panel
的规模和制造TabControl
的大小等于(或函数)它的,但我注意到,Size
参数显然只有当Panel
涂变化,因为添加Controls并没有改变它,所以我不得不等待Panel
去绘画然后调整它的大小,这听起来很sl。。有更好的解决方案吗?
UPDATE 使用锚定和设置
Panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
tabControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
只会导致这样的:
而不是设置大小,为什么不利用Anchoring优势?如果您将Panel
固定为TabPage
/TabControl
的Top | Left | Right | Bottom
,那么TabControl
到Form
的方式与您只需要担心Form
的大小相同。它会决定所有其他项目的大小。
那么,默认情况下,Panel不是固定在主机对象上的吗? '.Anchor = Top |的默认值左',我还没有修改过。同样,我的想法正好相反,让表单的内容决定自己的大小(通过'.Autosize'),然后'表格'自动化为其内容。我不想担心字体的不同大小,并因此担心在不同显示器或不同版本的Windows上的整个“表格”。 – Wasabi 2013-05-11 15:21:03
一切都锚定在顶部|左侧'默认。我的建议(我将编辑答案以更好地表达)是你锚定'Top |离开| Right | Bottom'。将它们全部锁定到“Form”的大小,然后只需要从内容中设置“Form”的大小。 – Adrian 2013-05-11 15:28:26
谢谢,但奇怪的是,实际上让事情变得更糟。添加: 'Panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;' 'tabControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;' 只是让'TabControl'表现得像'.Dock!= Fill'一样,现在它甚至不填充表单。 而它的一个真正无趣的,显然没有办法使'TabControl'像一个带'Panel'的简单'Form'一样好,在那里我不必担心任何东西的大小。 – Wasabi 2013-05-11 15:43:16
在设计器中使用.AutoScaleMode = None
作为用户控件的面板。 在我的情况下,它的工作原理是TabControl-TabPage-myPage。
无关的评论:您的GUI似乎是某种平面图或图设计器应用程序。我强烈建议你使用相关的当前UI技术,并留下winforms。 ['Here'](http://stackoverflow.com/a/15821573/643085)是在WPF + MVVM中完成类似事件的一个例子,支持动画,鼠标拖动,动画以及其他非常有趣的视觉和交互功能。 – 2013-05-11 15:56:24
更不用说你在这里遇到的问题(这是缺乏独立的winforms分辨率)绝对不存在于新技术。 – 2013-05-11 16:02:06
是的,我看着那个链接,看起来很酷。感谢您让我花了一整天的时间学习WPF。另外......你真的对WPF充满激情,我可以说。 – Wasabi 2013-05-11 16:18:08