在重新控制时移动表单的内容

我们只是说我的窗体上有很多控件,当用户点击其中一个时,它的高度就会扩大。 这意味着,当前,当这个点击控制扩展时,其下面的其他控件将被扩展控件重叠。

但是我想要发生的情况是,扩展控件下面的每个控件向下滑动,以使它们再次位于展开后的控件下方。

我知道如何处理滑动,但我不知道如何在每次移动给定的控件时除了一次移动以外的每个控件。

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

这就是我的想法:

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是否在扩展通知框下方,请参阅下面的修改后的代码:

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

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

下面是它应该看起来的一个样本:


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

例如,在上面的表单中,调整button1控件的大小只是将所有下面的控件都放在窗体上。 你也可以在设计时尝试。 将表单放入流布局面板,将3-4控件放入容器并开始试验。


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


你需要的是某种'ExplorerBar'功能。 有几个控制库提供了这个功能,并且我在CodeProject上找到了这个免费的文章。

链接地址: http://www.djcxy.com/p/58371.html

上一篇: Move contents of Form when a Control is re

下一篇: Setting a Forms ClientSize changes the Location of the control