重新定位控件时移动窗体的内容

时间:2011-05-15 05:38:27

标签: c# .net winforms controls location

我们只是说我的表单上有许多控件,当用户点击其中一个时,它的高度会扩大。这意味着,目前,当此单击控件展开时,其下方的其他控件将与展开的控件重叠。

但我想要发生的是,扩展控件下方的每个控件都向下滑动,以便它们再次低于扩展控件。

我知道如何处理滑动,但我只是不知道如何在每次移动给定控件时进行一次移动。

非常感谢任何帮助,谢谢!

这就是我的想法:

void newOrderReceived(object sender, EventArgs e)
{
    foreach(Control OrderNotificationBox in OrdersPanel.Controls)
    {
        if(OrderNotificationBox is NotificationBox) // Checks to see if the control is a NotificationBox
        {
            // Add my code to slide controls down.
        }
    }
}

但是......我怎么知道控件是否低于扩展控件?

这是我应该如何更改扩展控件下方所有控件的位置?

编辑:刚想了想,看看NotificationBox是否在Expanded NotificationBox下面,请看下面的修改代码:

void newOrderReceived(object sender, EventArgs e)
{
    foreach(Control OrderNotificationBox in OrdersPanel.Controls)
    {
        if(OrderNotificationBox is NotificationBox) // Checks to see if the control is a NotificationBox
        {
            if(OrderNotificationBox.Location.Y <= ExpandedNotificationBox.Location.Y + ExpandedNotificationBox.Size.Width)
            {
                // Add my code to slide controls down.
            }
        }
    }
}

但这会足够吗?目前,这是有效的,所以我想我刚刚回答了我自己的问题。但是,有没有更好的方法来做到这一点?更优雅/更有效的方式?

以下是它应该如何显示的示例: Expanded Control with properly re-located controls

3 个答案:

答案 0 :(得分:2)

FlowLayoutPanel为您提供动态布局,您可以在其中调整其中的任何控件,并且所有下方控件都会自动滑动。使用流布局面板的组/列有许多策略能够实现整个表单的期望外观。一些谷歌搜索将揭示其中一些。

enter image description here

例如,在上面的表单中,调整button1控件的大小只会将所有下面的控件流向窗口的下方。您也可以在设计时尝试。将表格放在流动布局面板上,在容器中放下3-4个控件并开始试验..

答案 1 :(得分:1)

对于每个可扩展内容,请使用Panel 将您的面板一个接一个地停靠在另一个下面(使用panel1.Dock = DockStyle.Top。对于最底部的面板使用panel1.Dock = DockStyle.Fill)。
将您的子控件放在每个可展开面板内,相应地设置内部控件'Anchor属性 展开一个面板时,其余面板将自动调整。您无需为此编码。您只会更改当前展开的面板的Height

答案 2 :(得分:0)

您需要的是某种“ExplorerBar”功能。有几个控件库提供了这个,我找到了免费提供它的文章here on the CodeProject