1

我创建了一个 CustomControl 来显示信息标签,并且可以使用箭头按钮最小化/恢复:

在此处输入图像描述

它应该停靠在表单的顶部。

然后以相同的形式,通常我有一个带有所有正常控件的中心面板,这里以黄色显示只是为了突出显示它。

在此处输入图像描述

最后,我有一个底部面板,其中包含表单上可用的所有命令/按钮。这是停靠在底部。

问题是我不知道如何将中心面板设置为在折叠顶部面板时自动占用可用空间。也就是说,没有“中心”对接风格。

如果我将中间面板停靠在顶部,那么当我折叠顶部面板时,我会得到:

在此处输入图像描述

如果我将中间面板锚定到所有边缘,我会得到:

在此处输入图像描述

如果我停靠中间面板以填充该区域,那么它会填充表单的所有客户区域,而不管其他面板是否存在。

是的,我可以在顶部控件中创建一个事件来通知谁对大小更改感兴趣,但是.. 这是一个丑陋的解决方案,因为它不是自动的:在每种形式中,我都必须听取事件并相应地调整中间面板的大小。

这个问题有优雅的解决方案吗?

4

3 回答 3

2

将 DockStyle 设置为Fill

在此处输入图像描述

在其他两个之后添加此控件。为了确保它在其他两个之后,CTRL-X 它,然后 CTRL-V 它回来。

于 2011-05-27T12:52:33.587 回答
2

但是,如果该中间控件位于顶部和底部停靠控件的“后面”,则您确实想要DockStyle.Fill,那么您需要重新排序控件。Internall WinForms 按照添加到父项的顺序处理项目。在 VisualStudio 设计器中,右键单击停靠在 Fill 的中间面板,然后选择“ Bring to Front ”或“ Move to Back ”。我忘记了哪一个是临时的,但是其中一个应该可以解决您的问题。

于 2011-05-27T12:56:31.720 回答
1

使用拆分容器将解决问题。拖动一个面板并将面板停靠属性设置为顶部(具有您的展开器/折叠按钮)。现在拖动一个拆分容器并将方向更改为水平。并将停靠样式更改为填充。

现在在 splitcontainer 顶部面板中拖动您的自定义控件并将您的表单控件添加到底部拆分器面板。当您想隐藏隐藏您的自定义控件时,请在按钮单击顶部面板中编写以下逻辑

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;
        }

    }

自定义控件折叠时底部控件将占据总空间

于 2011-08-11T11:18:45.633 回答