我创建了一个CustomControl来显示信息标签,可以使用箭头按钮最小化/恢复:
它应该停靠在表单的顶部。
然后以相同的形式,我通常会有一个包含所有正常控件的中心面板,这里是黄色的showm,只是为了突出显示它。
最后,我有一个底部面板,其中包含表单上可用的所有命令/按钮。它停靠在底部。
问题在于,当我折叠顶部面板时,我不知道如何设置中心面板以自动消耗可用空间。也就是说,没有“中心”对接方式。
如果我将中间面板停靠在顶部,那么当我折叠顶部时,我得到:
如果我将中间面板固定到所有边缘,我会得到:
如果我停靠中间面板以填充该区域,那么它将填充表单的所有客户区域,无论其他面板是否存在。
是的我可以在顶级控件中创建一个事件来通知谁对尺寸变化感兴趣但是......这是一个丑陋的解决方案,因为它不是自动的:在每种形式中我都必须听取事件并调整中间位置小组相应的。
这个问题有一个优雅的解决方案吗?
答案 0 :(得分:2)
将DockStyle设置为填充:
在另外两个之后添加此控件。为了确保它在其他两个之后,CTRL-X它,然后CTRL-V它回来。
答案 1 :(得分:2)
您确实需要 DockStyle.Fill
但是如果该中间控件位于顶部和底部停靠控件的“后面”,则需要重新排序控件。 Internall WinForms按照添加到父级的顺序处理项目。在VisualStudio设计器中,右键单击停靠在“填充”的中间面板,然后选择“置于前面”或“移至后面”。我忘了它是哪一个,但其中一个应该解决你的问题。
答案 2 :(得分:1)
使用Split容器可以解决问题。 拖动面板并将面板停靠属性设置为顶部(具有扩展器/折叠按钮)。 现在拖动拆分容器并将oreintation更改为水平。并将dockstyle更改为fill。
现在在splitcontainer顶部面板中拖动自定义控件并将ur表单控件添加到底部拆分器面板。 如果要隐藏隐藏自定义控件,请在按钮上单击顶部面板上写下以下逻辑
private void btnExpandCollapseOptions_Click(object sender, EventArgs e)
{
if (splMainContainer.Panel1Collapsed)
{
splMainContainer.Panel1Collapsed = false;
btnExpandCollapseOptions.Image = ImageResource.collapseMinus;
//changing image to collapse/expand from imageresource.resx file
}
else
{
splMainContainer.Panel1Collapsed = true;
btnExpandCollapseOptions.Image = ImageResource.ExpandPuls;
}
}
当自定义控件折叠时,底部控件将占用总空间