开发者

Move contents of Form when a Control is re-Located

Let's just say that I have many controls on my Form, and when a User clicks on one of them, its height will expand. This means that, currently, when this clicked-control expands, other controls below it will become overlapped by the expanded control.

But what I want to happen, is for each Control below the expanded control to slide down, so that they are below the expanded control again.

I know how to handle sliding, but I just don't know how to make every control except for one move everytime a given control is moved.

Any help at all is greatly appreciated, thank you!

This is what I was thinking:

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

But... How do I know if the control is below the expanded control?

Is this how I should go about changing the locati开发者_运维技巧on of all controls below the expanded control?

Edit: Just had a thought, to check to see if a NotificationBox is below the Expanded NotificationBox, see revised code below:

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

But would this be sufficient? Currently, this is working, so I guess I just answered my own question. But, isn't there a better way to do this? A more elegant/efficient way?

Here's a sample of how it should look:

Move contents of Form when a Control is re-Located


FlowLayoutPanel provides you with dynamic layout where you can resize any control in it and all below controls will slide automatically. There are many strategies to using groups/columns of flow layout panels to be able to achieve the desired look for the whole form. Some googling will reveal some of these.

Move contents of Form when a Control is re-Located

For instance in the form above, resizing the button1 control simply flows all the below controls to further down on the form. You can try that at the design time also. Drop the form a flow layout panel, drop 3-4 control in the container and start experimenting..


For each expandable content use Panel.
Dock your panels one under another (Use panel1.Dock = DockStyle.Top. For the very bottom panel use panel1.Dock = DockStyle.Fill).
Place your child controls inside of each expandable panel, set inner controls' Anchor properties accordingly.
When you expand one panel, the rest of the panels will adjust automatically. You don't need to code for this. You will only change Height of a panel that you currently expand.


What you need is some kind of 'ExplorerBar' functionality. There are several control libraries that offer that, and I found the article here on the CodeProject that has it for free.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜