在WinForms中调整单个控件的大小

时间:2009-04-20 21:09:53

标签: c# windows winforms user-interface resize

我如何在C#/ WinForms中设计一个恰好包含几种不同控件类型的UI,以便在用户调整窗口大小时只调整ListView控件的大小?

5 个答案:

答案 0 :(得分:24)

根据父容器的大小更改(在您的情况下为Form),有两种主要方法可以使控件自动调整大小:

  1. 将控件的Dock属性设置为DockStyle.Fill。
  2. 将Anchor属性设置为“Top,Bottom,Left,Right”
  3. 将Dock属性与Dock.Fill一起使用

    此方法的优点是它接受整个控件并告诉它始终填充父容器的整个客户区(在您的情况下,表单客户区)。如果您想要使用ListControl或TreeView或类似的东西填充Form,那么这很有用。但是如果你想在使用其他控件的同时缩放单个控件(如你所指示的那样),它就不那么有用了。在这种情况下,您需要将其他控件上的Dock属性设置为DockStyle.Top或DockStyle.Bottom,以使它们浮动到主调整大小控件的上方或下方。

    这是一个麻烦,它也限制了其他控件的布局选项。您可以通过停靠两个Panel控件来缓解该问题,一个位于顶部,另一个位于窗体底部。这些面板将保持固定位置,而中间区域(使用DockStyle.Fill控件)与父窗体缩放。然后,您可以在任何布局配置中将任何控件放在那些“页眉”和“页脚”面板中。

    这种采用对接面板的复合造型非常强大。坦率地说,当用.NET 1.0 WinForms引入它时,它在.NET中发生了变化。

    将Anchor属性与“Top,Bottom,Left,Right”

    一起使用

    如果您只想在表单刻度上使用单个控件,而其他控件保持“卡住”边缘,请使用Anchor属性。对于要保留在顶部的控件,将Anchor属性设置为“Top,Left”(默认值)。对于要保留在底部的控件,将Anchor属性设置为“Bottom,Left”。对于要使用窗体/对话框(例如单行文本框控件)增加宽度的控件,将Anchor属性设置为“Left,Right”(并根据您是否希望它作为顶部移动设置Top或Bottom)或者对话框底部改变。

    如果您希望控件使用Form在所有方向上调整大小,请将Anchor属性设置为“Top,Left,Bottom,Right”。对于“主要控件”类型的事物非常有用,例如显性列表框,树控件或多行文本框。

    根据您的需要,不要乱用AutoSize或AutoSizeMode ......这些属性控制控件如何根据自己的内容更改大小,而不是根据容器的行为调整大小。将AutoSize / AutoSize模式视为向内看,而Anchor / Dock则向外看。如果同时使用两种大小调整方法,则会出现一些非常奇怪的行为。一般没用。

答案 1 :(得分:6)

将ListView停靠到表单的所有四个边,将另一个控件拖到2或更少。

答案 2 :(得分:3)

控件上有一个名为“Anchor”的属性(在“布局”类别中),如果将其设置为“上,下,左,右”,它将保持控件与其父容器之间的边距,从而使其大小调整为容器改变大小。

但如果只启用一个轴上的一个锚点(例如“左”,但不是“右”),它将移动控件,同样,再次保留控件与其容器之间的锁定边距。

简而言之:正是詹姆斯所说的,除了它是“锚”而非“码头”属性。 Dock类似但不完全相同。

答案 3 :(得分:1)

如果将ListView放在SplitContainer的一个面板中并将其余控件放在另一个面板中,则可以通过设置min和maxsize来限制第二个面板的增长。

如果您的ListView停靠在Full,那么在调整表单大小时它将全部增加。

答案 4 :(得分:1)

如果我们在表单中有多个控件怎么办?

例如:如果表单用于在网格中生成与在几个文本框或组合框等中输入的数据相关的结果; 我们希望它们相应地调整大小/重新对齐,而不是相互重叠(,因为它在使用dock-fill 时发生),尤其是在上下文中使用网格视图或类似控件时。 alt text