.net 对接控件

发布于 11-10 06:02 字数 696 浏览 4 评论 0原文

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

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

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

在此处输入图像描述

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

问题是我不知道如何设置中心面板在折叠顶部面板时自动消耗可用空间。也就是说,不存在“中心”对接样式。

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

在此处输入图像描述

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

在此处输入图像描述

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

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

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

I have created a CustomControl to show information labels and that can be minimized/restored with an arrow button:

enter image description here

It should be docked to the top of a form.

Then in the same form usually I have a center panel with all the normal controls, here it is showm in yellow just to highlight it.

enter image description here

Finally I have a bottom panel containing all the commands/buttons available on the form. This is docked to the bottom.

The problem is that I don't know how to set the center panel to automatically consume the available space when I collapse the top panel. That is, there's no a "Center" Docking style.

If I dock the middle panel to the top, then when I collapse the top one I get:

enter image description here

If I anchor the middle panel to all the edges, I get:

enter image description here

If I dock the middle panel to fill the area, then it fills all the client area of the form, regardless the existence of the other panels.

Yes I could create an event in the top control to notify who is interested about the size change but.. It's an ugly solution because it's not automatic: in every form I'll have to listen to the event and resize the middle panel accordingly.

Is there an elegant solution to this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

心意如水2024-11-17 06:02:33

使用Split容器就可以解决这个问题。
拖动面板并将面板停靠属性置于顶部(其中有扩展器/折叠按钮)。
现在拖动一个拆分容器并将方向更改为水平。并将停靠样式更改为填充。

现在,在 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;
        }

    }

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

Using Split container will solve the problem.
Drag a Panel and make the panel dock property to top (which has ur expander/collapse button).
Now drag a split container and change the oreintation to horizontal.and change dockstyle to fill.

Now in the splitcontainer top panel drag ur custom control and add ur form controls to the bottom splitter panel.
When you want to hide the hide ur custom control write the following logic in button click on top panel

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

    }

the bottom contorl will occupy the total space when custom control collapses

长不大的小祸害2024-11-17 06:02:32

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

You do want DockStyle.Fill however if that middle control is going 'behind' the top and bottom docked controls, then you need to re-order the controls. Internall WinForms processes the items in the order they were added to the parent. In VisualStudio designer, right-click on your middle panel that is docked to Fill, and select "Bring to Front" or "Move to Back". I forget which one it is offhand, but one of them should fix your issue.

唔猫2024-11-17 06:02:32

将 DockStyle 设置为 Fill

在此处输入图像描述

在其他两个控件之后添加此控件。为了确保它出现在另外两个之后,请按 CTRL-X,然后按 CTRL-V 将其放回。

Set the DockStyle to Fill:

enter image description here

Add this control after the other two. To ensure it comes after the other two, CTRL-X it, then CTRL-V it back in.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文