如何强制 WinForms 控件填充 TableLayoutPanel 中多列跨单元格中的 FlowLayoutPanel?

How to force a WinForms control to fill up FlowLayoutPanel that's in a multi-column-spanning cell in a TableLayoutPanel?

我有一个 TextBox,它位于 FlowLayoutPanel 中,它位于 TableLayoutPanel 的单元格内。 FlowLayoutPanel 跨越 TableLayoutPanel 的 5 列,并填满 5 列的整个宽度。然而,TextBox 并没有填满 FlowLayoutPanel 的整个宽度,正如您在此处看到的(黑色边框是 FlowLayoutPanel):

如何让 TextBox 跨越 FlowLayoutPanel 的整个宽度?

生成此示例的代码:

// fsi --exec Test.fsx
open System
open System.Windows.Forms

let frmMain () =
  let f = new Form(Text = "Test table layout panel")
  let tlp =
    new TableLayoutPanel
      ( ColumnCount = 5,
        RowCount = 1,
        AutoSize = true,
        Parent = f )
  let flp =
    new FlowLayoutPanel
      ( AutoSize = true,
        BorderStyle = BorderStyle.FixedSingle )
  let tb = new TextBox(Parent = flp)

  tlp.Controls.Add(flp, 0, 0)
  tlp.SetColumnSpan(flp, 5)
  flp.Dock <- DockStyle.Fill
  tb.Dock <- DockStyle.Fill

  f

[<STAThread>]
do
  Application.EnableVisualStyles()
  Application.Run(frmMain ())

您不能真正 Dock 在流式布局面板中,这没有任何意义。

流式布局面板用于包含一组一起流动的控件(从左到右,从上到下),让一个控件填充它将否定流式布局的用处。

如果您想用文本框填充列,只需使用 Textbox 并将 Dock FillMultiline 设置为 true

停靠在 FlowLayoutPanel 中不起作用,因为它想要按流动顺序布置控件。由于您想停靠填充 TextBox 控件,请尝试使用简单的 Panel 控件。

此外,将 TextBox 的多行 属性 设置为 true。