我正在开发一个UserControl,它包含一系列在flowlayoutpanel中横向排列在控件顶部的ComboBox,以及一个直接位于flowlayoutpanel下方的datagridview,它占用控件上的所有剩余空间。我需要能够轻松隐藏所有下拉菜单,所以我有一个SplitContainer,Orientation == Horizontal,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的父容器的大小?
由于
答案 0 :(得分:3)
看起来你觉得这有点过于复杂,无法满足你的需求。您可以使用内置对接来完成您想要的操作,而无需使用SplitContainer
。请改为设置您的表单:
FlowLayoutPanel1 (Autosizse = true, Dock = Top)
ComboBox1
ComboBox2
ComboBox3
DataGridView1 (Dock = Fill)
然后,当您想要隐藏FlowLayoutPanel1
时,您只需切换Visible
属性即可隐藏/显示它。