FlowLayoutPanel AutoSize高度不起作用

时间:2009-12-28 19:39:46

标签: winforms layout flowlayoutpanel

我正在开发一个UserControl,它包含一系列在flowlayoutpanel中横向排列在控件顶部的ComboBox,以及一个直接位于flowlayoutpanel下方的datagridview,它占用控件上的所有剩余空间。我需要能够轻松隐藏所有下拉菜单,所以我有一个SplitContainer,Orientation == Horizo​​ntal,splitlayoutpanel在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 个答案:

答案 0 :(得分:3)

看起来你觉得这有点过于复杂,无法满足你的需求。您可以使用内置对接来完成您想要的操作,而无需使用SplitContainer。请改为设置您的表单:

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

然后,当您想要隐藏FlowLayoutPanel1时,您只需切换Visible属性即可隐藏/显示它。