3

我正在研究一个 UserControl,它由一堆 ComboBoxes 组成,这些 ComboBoxes 在 flowlayoutpanel 中的控件顶部水平排列,而在 flowlayoutpanel 正下方的 datagridview 占据了控件上的所有剩余空间。我需要能够轻松隐藏所有下拉列表,所以我有一个方向 == 水平的 SplitContainer,SplitContainer.Panel1 中有 flowlayoutpanel,SplitContainer.Panel2 中有 datagridview。

控制层次结构如下:

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 的父容器的大小?

谢谢

4

1 回答 1

3

看起来你让这对于你需要的东西来说有点太复杂了。您可以使用内置的对接来完成您想要的,而无需使用SplitContainer. 像这样设置您的表单:

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

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

于 2009-12-28T20:01:56.630 回答