我们只是说我的表单上有许多控件,当用户点击其中一个时,它的高度会扩大。这意味着,目前,当此单击控件展开时,其下方的其他控件将与展开的控件重叠。
但我想要发生的是,扩展控件下方的每个控件都向下滑动,以便它们再次低于扩展控件。
我知道如何处理滑动,但我只是不知道如何在每次移动给定控件时进行一次移动。
非常感谢任何帮助,谢谢!
这就是我的想法:
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.
}
}
}
}
但这会足够吗?目前,这是有效的,所以我想我刚刚回答了我自己的问题。但是,有没有更好的方法来做到这一点?更优雅/更有效的方式?
以下是它应该如何显示的示例:
答案 0 :(得分:2)
FlowLayoutPanel为您提供动态布局,您可以在其中调整其中的任何控件,并且所有下方控件都会自动滑动。使用流布局面板的组/列有许多策略能够实现整个表单的期望外观。一些谷歌搜索将揭示其中一些。
例如,在上面的表单中,调整button1控件的大小只会将所有下面的控件流向窗口的下方。您也可以在设计时尝试。将表格放在流动布局面板上,在容器中放下3-4个控件并开始试验..
答案 1 :(得分:1)
对于每个可扩展内容,请使用Panel
将您的面板一个接一个地停靠在另一个下面(使用panel1.Dock = DockStyle.Top
。对于最底部的面板使用panel1.Dock = DockStyle.Fill
)。
将您的子控件放在每个可展开面板内,相应地设置内部控件'Anchor
属性
展开一个面板时,其余面板将自动调整。您无需为此编码。您只会更改当前展开的面板的Height
。
答案 2 :(得分:0)
您需要的是某种“ExplorerBar”功能。有几个控件库提供了这个,我找到了免费提供它的文章here on the CodeProject。