【问题标题】:Empty space in FlowLayoutPanel when maximizing the Form最大化表单时FlowLayoutPanel中的空白空间
【发布时间】:2017-01-04 00:15:56
【问题描述】:

我正在向我的主窗体添加一个将 Dock 属性设置为 Fill 的 UserControl。 UserControl 有一个 FlowLayoutPanel,它也停靠(填充)并且 AutoScroll 属性设置为 True。

FlowLayoutPanel 包含 5 个组框,每个组框都有自己的大小。当表单(或用户控件)处于正常大小(716x520)时,组框从上到下,一切都很好。

但是当我最大化表单(或只是让它更大)时,组框会重新排列,并且在前 2 个组框之后会出现一个奇怪的空间。这就像有行,如果同一行的另一个分组框更大,那么就会出现一个空格来完成高度差。

这里有一些图片可以更好地解释它:

【问题讨论】:

  • 当您最大化您的表单时,您的面板也会变得更大。所以 FLP 重新计算布局,这就是它想出的。它不会尝试解决臭名昭著的装箱问题,这是一个 NP 难题。它需要在比眨眼更短的时间内完成。功能,而不是错误。
  • 那么有没有解决方案或者我应该接受这个?

标签: c# flowlayoutpanel


【解决方案1】:

显然您为FlowDirection 指定LeftToRight 而不是TopDown。所以当那个布局面板足够宽时,第一行就会有其他分组框的空间...

这种布局有点类似于文本的自动换行,根据可用的宽度,您可以在第一行获得尽可能多的单词。

所以如果你改变方向,如果你有足够的高度,你将有一个单独的列。

对于这个问题还有其他可能的解决方案。假设组框都是固定大小,那么您可以将流布局面板停靠设置为None,以便面板不会调整为可用宽度(然后通过为该面板提供适当的大小来防止出现多列.

另一种可能性是使用基于表格的布局。鉴于您所有的分组框都具有相同的宽度,这不是必需的(在工作时使用流布局会更简单一些)。

但实际上,如果有足够的空间,您可能更愿意在屏幕上显示所有组框并避免使用滚动条。这可以使用流布局来完成。在您的情况下,您可能希望使用 TopDown 流、顶部停靠、布局面板自动调整大小(并且可能将自动滚动放在用户控件上)。

【讨论】:

  • 好吧,我只是做了一些测试。如果你想要TopDown 布局,那么布局面板应该停靠在左边,但如果不是所有的组框都可以容纳,你会得到一个水平滚动条。否则,LeftToRightTop 对接会给您带来与最初相同的问题......因此,AutoSizeFlowDirection 是相关的,如果没有自定义代码,您将无法获得您可能想要的确切内容。
  • 我试过 TopDown FlowDirection 但是当窗体最大化并且用户控件(和 FLP)的大小增加时,足以在同一行有 2 个组框,它只显示每行 1 个组框和它一直向下。有没有办法在 716x520 时从上到下显示它们,但当它足够大时,在一行显示 2 个组框但没有这些空格?
  • 如果布局是TopDown,那么容器的高度是固定的,宽度是调整的。您不会有任何间隙,因为第一列是从顶部填充的,然后是第二列,依此类推。但是由于不同的维度是 X,如果没有足够的空间,滚动条将是水平的。如果要先填充行,则所有组框应具有相同的高度以避免这些空间。将数字作为分组框的标题,很容易找出热流布局的作品。如果在尝试了我告诉过的选项后,你无法得到你想要的,那么唯一的解决方案就是做你自己的布局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2012-10-22
  • 2021-07-28
  • 2018-03-01
相关资源
最近更新 更多