使 FlowLayoutPanel.AutoSize 与固定的行或列一起工作
Make FlowLayoutPanel.AutoSize to work with fixed rows or columns
我正在创建左右滑块控件,方法是将 FlowLayoutPanel 放置在面板内并将 FlowLayoutPanel.Autosize 设置为 true。面板大小是固定的,这些是我为 FlowLayoutPanel 设置的一些属性。
FlowDirection = LeftToRight
AutoSize = true
AutoSizeMode = GrowAndShrink
WrapContents = true
在运行时,我以编程方式将按钮添加到 FlowLayoutPanel,它看起来像这样
问题是我想通过设置固定数量的行或列来实现多行,但它总是在一行中。也就是说,如果我选择 3 行,所有按钮将仅在 3 行中流动,列数越多越好,反之亦然
pnlSlider.SetFlowBreak(btn,true)
这就是我想要实现的
- 黑框是面板
- 棕框FlowLayoutPanel里面的Panel
- 绿框是运行时添加的按钮
有什么解决办法吗
编辑
我在这里提到了一个解决方案,这似乎与我需要的有关,但是这个解决方案是在设计时设置FlowBreaks,并且行数无法固定。
我试图复制的样本。如果你仔细观察,这些是放置在面板中的按钮,很可能是在另一个控件内滑动的流程布局
要拥有自动调整大小、可滚动的多行 FlowLayoutPanel
,您可以在自动滚动面板中托管 FlowLayoutPanel
。 FlowLayoutPanel
也应该自动调整大小:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Me.Size = New Size(320, 160)
Dim p = New Panel() With {.AutoScroll = True, .Dock = DockStyle.Fill}
Dim f = New FlowLayoutPanel() With {.AutoSize = True, .WrapContents = True}
p.Controls.Add(f)
Me.Controls.Add(p)
For i = 1 To 20
Dim btn = New Button() With {.Text = i.ToString()}
If (i Mod 10 = 5) Then f.SetFlowBreak(btn, True)
f.Controls.Add(btn)
Next
Me.ActiveControl = f.Controls(0)
End Sub
在上面的示例中,我在第 5 项和第 15 项上插入了一个分隔符,使结果成为多行。同样如您所见,水平滚动条可见:
我正在创建左右滑块控件,方法是将 FlowLayoutPanel 放置在面板内并将 FlowLayoutPanel.Autosize 设置为 true。面板大小是固定的,这些是我为 FlowLayoutPanel 设置的一些属性。
FlowDirection = LeftToRight
AutoSize = true
AutoSizeMode = GrowAndShrink
WrapContents = true
在运行时,我以编程方式将按钮添加到 FlowLayoutPanel,它看起来像这样
问题是我想通过设置固定数量的行或列来实现多行,但它总是在一行中。也就是说,如果我选择 3 行,所有按钮将仅在 3 行中流动,列数越多越好,反之亦然
pnlSlider.SetFlowBreak(btn,true)
这就是我想要实现的
- 黑框是面板
- 棕框FlowLayoutPanel里面的Panel
- 绿框是运行时添加的按钮
有什么解决办法吗
编辑
我在这里
我试图复制的样本。如果你仔细观察,这些是放置在面板中的按钮,很可能是在另一个控件内滑动的流程布局
要拥有自动调整大小、可滚动的多行 FlowLayoutPanel
,您可以在自动滚动面板中托管 FlowLayoutPanel
。 FlowLayoutPanel
也应该自动调整大小:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Me.Size = New Size(320, 160)
Dim p = New Panel() With {.AutoScroll = True, .Dock = DockStyle.Fill}
Dim f = New FlowLayoutPanel() With {.AutoSize = True, .WrapContents = True}
p.Controls.Add(f)
Me.Controls.Add(p)
For i = 1 To 20
Dim btn = New Button() With {.Text = i.ToString()}
If (i Mod 10 = 5) Then f.SetFlowBreak(btn, True)
f.Controls.Add(btn)
Next
Me.ActiveControl = f.Controls(0)
End Sub
在上面的示例中,我在第 5 项和第 15 项上插入了一个分隔符,使结果成为多行。同样如您所见,水平滚动条可见: