views:

562

answers:

2

I have a form which is a mdicontainer and has a menu strip at the top. I add a child form to my mdi container and when I maximize the child it maximizes over the menustrip. I want to know how to limit the child to maximize below the menustrip. Any help would be appreciated.

A: 

You could set the MaximumSize property so that it doesn't fill up the entire container.

Nate Shoffner
That works except that it puts it all the way at the top and leaves the open space at the bottom. If I set the location to below the menustrip, it works the first time but after that it puts it back up to the top again.
Scott Chantry
A: 

Your child form is being maximized in the way that child forms are supposed to be maximized in MDI. It's not really covering the menu strip of the parent form - it's actually merging its own menu strip with that of the parent form.

To make the child form take up only the available child area in the MDI parent (and not merge its menu with the parent's menu), put something like this code in the child form's Resize event:

if (this.WindowState == FormWindowState.Maximized)
{
    this.WindowState = FormWindowState.Normal;
    this.Size = this.MdiParent.ClientSize;
    this.Location = new Point(0, 0);
}

which will prevent the child window from being actually maximized.

I say "something like this code" because this snippet doesn't work exactly right. The ClientSize property of the parent form gives the overall size of the form, whereas you want to use the size of just the MDI client area. I don't know how to get that, and apparently it's not super-easy. See this question:

http://stackoverflow.com/questions/603788/size-location-of-winforms-mdi-client-area

MusiGenesis