流式布局面板与水平滚动条问题

7

我正在使用一个流布局面板来包含很多按钮,为了逻辑上的需要。但是当我调整窗口大小时,我发现不是所有的按钮都水平排列在同一行上,而是随着窗口大小的变小,按钮会自动换到下一行。请问有谁能帮助我解决这个问题吗?我只想让这些按钮水平排列,并在窗口变小时出现水平滚动条。以下是我的代码:

fLayoutPnl.Controls.Add(btn1);
// snipped adding buttons from 2 to 15
fLayoutPnl.Controls.Add(btn16);
fLayoutPnl.Dock = System.Windows.Forms.DockStyle.Top;
fLayoutPnl.Location = new System.Drawing.Point(0, 10);
fLayoutPnl.Name = "fLayoutPnl";
fLayoutPnl.Size = new System.Drawing.Size(1245, 30);

1
这就是 FlowLayoutPanel 中的“flow”所代表的意思。 - Hans Passant
3个回答

16

如果您将flowlayoutpanel停靠在顶部,它将占用父控件的尺寸。因此,如果您想要横向滚动条,需要设置窗体(或用户控件)的AutoScrollMinSize。

否则,您可以这样做:

this.AutoScroll = true;    
this.fLayoutPnl.Dock = System.Windows.Forms.DockStyle.None;
this.fLayoutPnl.AutoSize = true;
this.fLayoutPnl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.fLayoutPnl.Location = new System.Drawing.Point(0, 10);
this.fLayoutPnl.Name = "fLayoutPnl";
this.fLayoutPnl.Size = new System.Drawing.Size(1245, 30);

我明白这一点,但如果我不使用flowlayoutpanel,所有的按钮都会水平创建,这不是我想要的。我希望它们垂直流动,除非我隐藏一个按钮,否则它不会在它们之间留下任何间隙。 - Calvin
好的,我编辑了我的回答并提供了一个例子。在这个例子中,按钮是在同一行上的。这是您想要的吗? - Hyralex
感谢您的帮助,我已经实现了水平滚动条。现在又出现了另一个问题,垂直滚动条也出现了。我不想显示垂直滚动条。我尝试过这个代码:this.fLayoutPnl.VerticalScroll.Visible = false,但是没有用。我还尝试将此代码添加到构造函数中,但仍然无济于事。您有什么建议吗? - Calvin
垂直滚动条在您的FlowLayoutPanel上还是在您的窗体上? - Hyralex
好的,如果我理解正确的话。您希望将流式布局面板放在一行上,并在窗体上添加水平滚动条。但是您的问题是流式布局面板有一个垂直滚动条。您确定流式布局面板的AutoScroll属性设置为false了吗?只需在您的窗体上将AutoScroll属性设置为true即可。 - Hyralex

13
fLayoutPnl.WrapContents = false;

这将解决问题。如果需要滚动条,请设置面板的MinimumSize属性,之后滚动条应该出现。


3

要垂直滚动查看流布局面板的所有内容,请将AutoScroll属性设置为True,不要忘记将WrapContents属性设置为True。 如果要通过水平滚动查看内容,请将AutoScroll属性设置为True,不要忘记将WrapContents属性设置为False。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接