【问题标题】:WinForms UserControl Layout Autosize ProblemsWinForms UserControl 布局自动调整大小问题
【发布时间】:2011-01-11 15:30:51
【问题描述】:

不久前,我在this question 上发布了关于尝试让 flowlayoutpanel 在停靠到容器顶部时正确自动调整大小的信息。我试图完成的是设置一个跨越表单顶部边缘的水平(从左到右)flowlayoutpanel,并且一个datagridview占据了flowlayoutpanel下方的其余可用空间。我无法让 flowlayoutpanel 的 height 属性自动调整大小。发布的答案非常适合我想要完成的工作,这很棒......

无法独自离开,我现在正尝试更进一步,将 flowlayoutpanel 包装在 UserControl 中。但是,我发现这样做会导致 flowlayoutpanel 不再正确调整其高度。

这是第一个布局,效果很好:

FlowLayoutPanel1 (Autosize = true, Dock = Top)
  ComboBox1
  ComboBox2
  ComboBox3
DataGridView1 (Dock = Fill)

这里是封装在 UserControl 中的 flowlayoutpanel:

UserControl (Autosize = true, Dock = Top)
  FlowLayoutPanel1 (Autosizse = true, Dock = Fill)
    ComboBox1
    ComboBox2
    ComboBox3
DataGridView1 (Dock = Fill)

无论出于何种原因,在调整表单大小时,flowlayoutpanel 都无法正确调整其高度。这很容易重现。哦,还有,FlowLayoutPanel 的内容可以是任何东西,而不仅仅是 ComboBoxes。

【问题讨论】:

    标签: .net winforms layout autosize flowlayoutpanel


    【解决方案1】:

    您的 UserControl 是否设置了宽度?查看designer.cs 以确定。如果是这样,您需要重置该属性。

    【讨论】:

    • 宽度似乎工作正常,但高度保持不变。当 flowlayoutpanel 的子级向下换行形成新行时,高度不会相应增加,子级会被垂直剪裁。
    【解决方案2】:

    我认为问题在于您拥有FlowLayoutPanel1.Dock = Fill,它覆盖了自动调整高度的尝试。

    修复方法可能是设置FlowLayoutPanel1.Dock = Top(就像你之前的那样),然后处理FlowLayoutPanel1.Resize 事件来调整用户控件的大小。本质上,您是在手动尝试使UserControl.Size 与FlowLayoutPanel1.Size 保持同步。

    可能有更聪明的方法来做到这一点,但希望它能让你走上正确的道路......

    【讨论】:

    • 这几乎可以工作。 Resize 事件完美运行,但我必须调整表单大小才能触发 Resize 事件。我希望在最初显示表单时进行这种大小调整,而不仅仅是在调整大小之后。我尝试了 UserControl.Load、Layout、VisibleChanged 和 Paint 事件,但没有成功。
    • 我注意到有一个 FlowLayoutPanel.SizeChanged 事件,也许我试试看?我不在安装了 VS 的机器附近,所以我不能自己玩它。您也可以尝试 FlowLayoutPanel.ControlAdded 事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多