代码之家  ›  专栏  ›  技术社区  ›  echo

FlowLayoutPanel自动调整高度不工作

  •  3
  • echo  · 技术社区  · 16 年前

    我正在研究一个用户控件,它由一组组合框组成,这些组合框水平排列在flowlayoutpanel中的控件顶部,而在flowlayoutpanel正下方的一个DataGridView占据了控件上所有剩余的空间。我需要能够轻松隐藏所有下拉列表,因此我有一个方向为=水平的SplitContainer,其中FlowLayoutPanel位于SplitContainer.Panel1中,DataGridView位于SplitContainer.Panel2中。

    控制层次如下:

    SplitContainer1
        SplitContainer1.Panel1
            FlowLayoutPanel1
                ComboBox1
                ComboBox2
                ComboBox3
        SplitContainer1.Panel2
            DataGridView1
    

    由于flowlayoutpanel的方向是水平的,水平空间是有限的,因此flowlayoutpanel的wrapContents属性为true,因此当控件太窄而无法在一行中容纳所有下拉列表时,下拉列表将向下折叠到下一行。

    我遇到的问题是,当flowlayoutpanel将其内容向下包装到下一行时,其height属性不会相应更改。FlowLayoutPanel的包装行被裁剪,并且不强制SplitContainer面板相应地增加高度。我已尝试处理flowlayoutpanel.Resize事件以增大和收缩SplitContainer.SplitterDistance属性以适应包装的内容,但在包装内容时,flowlayoutpanel.Height属性不会更改。我被难住了。FlowLayoutPanel是否损坏?如果flowlayoutpanel.height始终保持不变,不管内容包装如何,我如何调整flowlayoutpanel的父容器的大小?

    谢谢

    1 回复  |  直到 16 年前
        1
  •  3
  •   Shawn Steward    16 年前

    你好像把事情弄得有点复杂,不适合你的需要。您可以使用内置的停靠来完成所需的操作,而无需使用 SplitContainer .改为这样设置表单:

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

    当你想隐藏的时候 FlowLayoutPanel1 您只需切换 Visible 属性隐藏/显示它。

    推荐文章