如果孩子停靠在边缘,滚动条不会出现在父控件中

时间:2014-07-04 16:31:18

标签: c# winforms layout

我想知道为什么子控件无法滚动,即使它无法容纳其容器。 这是我布局的简单示例:

enter image description here

我里面有橙色面板和绿色面板。橙色面板的AutoScroll设置为true。 绿色面板停靠在顶部,最小宽度= 150。 为什么水平滚动条不会出现在橙色面板上?

没有DockStyle = Top一切正常。我可以使用Anchors,但是在创建更复杂的布局时,我感觉更舒服,其中许多组框和面板相互堆叠。 我也不喜欢使用AutoScrollMinSize,因为它设置了限制,无论表单上当前可见哪些控件。

问题是为什么这样做?

P.S。如果这是设计的,请告诉我除了绿色面板上的锚点或橙色面板上的AutoScrollMinSize之外没有其他方法。在我看来,即使你的子控件无法适应其父控件且父控件具有AutoScroll = true,它也无法显示滚动条。我猜布局引擎甚至不会费心计算停靠控件的实际宽度,因为从理论上讲它可以拉伸到你拥有的任何父宽度。

1 个答案:

答案 0 :(得分:1)

看起来这是设计的。我检查了ScrollableControl的代码,从中继承了Panel,因此继承了TableLayoutPanel和FlowLayoutPanel等其他容器。 如果子控件具有:

,则不会检查水平滚动条
Dock=Top|Bottom|Fill|Right or Anchor=Right or Anchor!=Left

相同的图片用于垂直滚动条,当子控件具有:

时会被忽略
Dock=Left|Bottom|Fill|Right or Anchor=Bottom or Anchor!=Top

除了使用AutoScrollMinSize或正确的锚点组合之外,我无能为力。