MDI Child Form Start Position Problem - c#

I am having this strange problem with the start position of the MDI child Form.
Here is my code for the start position, I wanted it to be the middle left of
the MDI Parent Form.
//show the task bar
ChildForm c1 = new ChildForm();
c1.MdiParent = this;
c1.StartPosition = FormStartPosition.Manual;
c1.Location = new Point(0, this.Height/2);
Strange thing is every time I start my Mdi parent form, the vertical scrollbar show up
and the mdi child form is position lower than half of the MDI parent form's height.
Then if I scroll the scroll bar down to see the whole mdi child form, the scrollbar disappear.
After this point, no matter how I change the size of the mdi parent form, the scrollbar will
not show up again.
Does Anybody knows Why?
Also, I was wondering if it is possible to hide a mdi child form with only a handle-like control left
in the mdi parent form. If the user click that handle, then the form show up again. If the user
click somewhere else, the form hide. It is kind of like Window taskbar.
I tried to use form.hide(), but it hides the whole mdi child form.
Thanks
Alex

Is is possible that your calculation is taking into account the windows bar at the top.
You can have a look at PointToClient or PointToScreen

you sholud minuse child form height and width like this
c1.Location = new Point(0, (this.Height - c1.Height)/2);

Related

How can I manage that a C# MDI Parent has Scrollbars, when the MDI Client is maximized?

I have a MDI Parent Form 1 and an MDI Child Form 2
The Form 2 has a MinimumSize = new System.Drawing.Size(568, 453); set.
And as long as the MDI Child is not maximized everything works fine(the MDI Parent shows scrollbars).
As soon as I maximize the MDI Child, the scrollbars disappear and i cannot access the rest of the Controls on the Form 2 in the lower Right Corner(the MDI Parent doesnt show Scrollbars).
I couldn't find any solution for this problem, i would be glad for any help or pointers. I would even be open for an other approach.
The MDI parent never shows scroll bars if the MDI children are maximized, as then technically no MDI child leaves the MDI client area (either no or all MDI children are maximized).
If you need automatic scrolling for maximized MDI children, you need to configure your MDI children to perform auto scrolling, too.

Popover transparent child form on top of parent form in windows c#

I want to display transparent form having same height and width like parent form in winforms c# application.
I am removing control box and border style properties of child form and want to display that form inside parent form in full height/width.
I represented child form area in red border in uploaded image.
I tried by setting height and width of child form on resize event of parent form but it couldn't work.
Form2 f2 = new Form2();
f2.Height = this.Height;
f2.Width = this.Width;
f2.Show();
It is displaying child form but not in proper way as i want to fit it on parent form.
Why i need this?
I am using third party control on parent form and want to add lines on it, but that control is not supporting graphics property.
So i am taking transparent form on top of that parent form and want to add graphics object like line, rectangle etc...
I am putting image for reference.
Please share your valuable thoughts to solve my problem.
Thanks in advance.

How to display Child form on the top of all elements of MDI form

I have created a MDI form and also a Child form. However my MDI form contains a ribbon menu docked in top, sidebar docked in left and a Panel container docked to be filled.
Now when i am invoking the child form, it gets shown behind all theses MDI docked controls.
And when after showing the child form if i make the panel_container1.visible = false the child form gets shown at that place.
I don't want to keep other controls visibility set to false and then again to true.
Is there any way that automatically the child form comes on the top of all these docked items?

C#.Net Panel Control and MDI Child forms - issue

Hi i am stuck in MDIform with panel control.
I have one panel control Docked (fill) to parent MDI form. When i try opening new child form with menu click event the child form doesn't show up in MDI container.
After debugging few times, i set the visible property of panel control to false, the child form shows up now.
what is causing this? is there any way that i can leave panel control as docked (fill) inside MDI container form and show the child form on top of that panel?
MDI child windows are always shown as a child of the MDI client area. The dark gray window in an MDI parent. You cannot cover this up with a docked panel, the child windows will show behind the panel. Obviously not visible. You must leave room for the client area, a hard requirement.
After the call to the Show method for the MDI child form, add the childForm.BringToFront() statement. The child form will show in front of the parent form controls.
It might be, that the panel control is shown in front of the MDI child. Try to move the MDI child to the foreground or the panel to the background.

Maximizing child mdi in limited area

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.
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:
Size/Location of Winforms MDI Client Area
You could set the MaximumSize property so that it doesn't fill up the entire container.
I know this an old question, but I just ran into this on an old project I'm working on, so here's an answer for anyone seeing this. Setting the Dock to DockStyle.Fill will give you the behaviour you want.
Just be aware that the window will act/look strange if you try to reposition or resize the window while it has that DockStyle.
To accomplish this, I subscribed to the MDI client window's resize event and if the window had just been maximized, I set its DockStyle to Fill, set the FormBorderStlye to FixedDialog(to prevent resizing), and set the window state to normal to prevent the maximization from occurring.
To prevent the user from moving the window while it is in this "maximized state" I simply overrode the WndProc method and handled when the window was being moved(SC_MOVE) and placed a return to prevent the action from taking effect.

Categories

Resources