C# 滚动条没有';如果子控件停靠到边缘,则不会显示在父控件中

C# 滚动条没有';如果子控件停靠到边缘,则不会显示在父控件中,c#,winforms,layout,C#,Winforms,Layout,我想知道为什么子控件不能滚动,即使它不能适应它的容器。 以下是我的简单布局示例: 我有橙色面板和绿色面板里面。橙色面板的AutoScroll设置为true。 绿色面板固定在顶部,最小宽度为150。 为什么水平滚动条不出现在橙色面板上 没有DockStyle=Top,一切正常。我可以使用锚点,但当创建更复杂的布局时,我会感觉更舒服,因为许多分组框和面板相互堆叠。 我也不喜欢使用AutoScrollMinSize,因为它设置了限制,而不管表单上当前可见哪些控件 问题是为什么它会这样工作 另外,请让

我想知道为什么子控件不能滚动,即使它不能适应它的容器。 以下是我的简单布局示例:

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

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

问题是为什么它会这样工作


另外,请让我知道这是否是设计的,除了绿色面板上的锚或橙色面板上的AutoScrollminize外,没有其他方法。我觉得奇怪的是,在这种情况下,它无法显示滚动条,即使您的子控件不能放入其父控件,并且父控件的AutoScroll=true。我猜布局引擎甚至不需要计算停靠控件的实际宽度,因为理论上它被拉伸到您拥有的任何父控件宽度。

看起来这是设计的。我检查了ScrollableControl的代码,从中继承了面板和其他容器,如TableLayoutPanel和FlowLayoutPanel。 如果子控件具有以下内容,则不会检查水平滚动条:

Dock=Top|Bottom|Fill|Right or Anchor=Right or Anchor!=Left
Dock=Left|Bottom|Fill|Right or Anchor=Bottom or Anchor!=Top
对于垂直滚动条,同样的图片,当子控件具有以下内容时,将忽略该图片:

Dock=Top|Bottom|Fill|Right or Anchor=Right or Anchor!=Left
Dock=Left|Bottom|Fill|Right or Anchor=Bottom or Anchor!=Top

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

绿色的在橙色的里面?是的,绿色的面板在橙色的里面。表单上没有其他内容?没有其他内容。这是一个测试项目,我复制了这个行为,只有两个面板。看起来像是设计出来的。