panel and MDI in c# - c#

following this link
http://www.codeproject.com/KB/cs/MDITabBrowsing.aspx
I made MDI and things are working well.
But I want to use mainform a panel which is splitted. In splitted panel 2. I can see my form numbers in tabbar but cann't see my form. It appears under panel. how can i see it above/ on panel.
reagrds,

First off, if you're going to ask questions on SO, you need to mark an answer for each one as correct. You've currently asked 11 questions and haven't marked any of them as having a correct answer. Users who take the time to answer your questions earn reputation only when their answer is marked as the correct one. So please take a moment to do this. You may find your questions falling on deaf ears if you continue to ask without feedback.
To mark an answer as correct, pick the one that best helped you, and on the left, under the number of votes the answer received, there is a check-mark. Click on this, and the check-mark will turn green, marking the answer as the accepted one.
As for you question: If I understand what you're trying to do, what you want to use is a regular panel. Drop it onto your MDI window surface, and set it to dock left. Make it as wide as you want. Now, when you show a child window, it will fill/occupy the space in the right hand side of the MDI window, and will not appear under the panel on the left.
If you want, you can make the panel on the left resizeable as follows:
Drop a panel onto the MDI form
Set it to dock left and size it appropriately
Drop a splitter control into the right side of the MDI window (the dark grey background, not on the panel)
The splitter will appear to the right of the panel, and your MDI windows will dock to the right and be resizeable
HTH,
James

Instead of a SplitContainerControl, use a Splitter control.

MDI forms are a parented to the MDI child window. The dark gray background of the MDI parent. If you put a panel on the parent, you'll overlap that child window. And thus overlap the forms as well.
The only fix for this is to set the Dock property of the panel. Say to the left. That makes the MDI child window resize itself to occupy the remaining space of the parent form. The panel now no longer overlap the MDI forms and they in turn won't overlap the panel.

Related

winform how to avoid two panel docking to be overlapped

Here is the picture to show the left panel is docked to left while the main panel is docked to Fill, but the left panel is overlapping the main panel
Any one know how to solve this problem?
You need to make sure there are on same level, play a little bit with:
Right Click on the control -> Send to Back or Bring to Front
options.
To give a bit more explanation:
If one of your panel is Dock to Left and the other to Bottom, but those are not on same level (Left panel is above Bottom one) Left panel will never force Bottom panel to move, as Bottom panel can use whole space, as on it's level there is nothing docked to Left it that makes sense.
Situation change if those two panels are on same level, then they respect each others docking.
In your scenario, you want to push your left hand side panel to back, so it is on same level with Main panel, and then act same way with the Bottom one, as needed.
I hope that helps.
The order in which the panels are created is causing this.
You can change this order with the document outline.
Set one panel higher in the list than the other, play with it until you get the desired result. Than close this window. In my case I also have to restart visual studio now since this view somehow makes visual studio very slow.
I have done the same thing but for me the two panels are not overlapping.
Let me tell you the steps I followed.
I took one panel from toolbox. Then made a copy of same panel by click and drag. I then changed their color two red and yellow respectively to differentiate between them. Then for red panel i set dock to left and for yellow panel I set dock to fill. Below is the screenshot for the same.
First case
Second Case
Third Case

Modify docking layout in WinForms

I have a SplitContainer on my form that has its Dock property set to Fill. It contains several child controls, many of which have event handlers attached to them. Later I decide to put a StatusStrip at the bottom of my form. Guess what, I can't set the StatusStrip to dock to the bottom of my form. The SplitContainer will continue to Fill the entire form. Even though the StatusStrip apparently gets docked to the bottom, it actually hides the bottom part of the SplitContainer behind it.
The only around it is to CUT the SplitContainer and then PASTE it back. Cutting the SplitContainer makes the StatusStrip the only control on my form and thus lets it capture the bottom docking. Afterwards, pasting the SplitContainer allows it to fill the remaining area. In short, docking uses First Come, First Serve method.
Now since my controls have lots of event handlers attached to them, cutting and pasting becomes a nightmare for me. Having my project in C# means I have to attach all those event handlers manually.
Is there a better work around?
This is a z-order issue between the splitter and the statusstrip. When you have a control you want to dock fill and one or more controls you want to dock top, left, right, or bottom, you have to have the fill control be the first in the z-order.
The better way is to open the Document Outline tool, select the SplitContainer and use the up or down buttons to change its z-order.
I should add that in Winforms the z-order is specified by the order in which you add controls to the Controls collection. That order determines the order the associated system controls are created, hence their z-order. Using the Document Outline tool to alter z-order simply causes the generated code to be re-ordered.

Docked panels layout

In winforms I am trying to setup 4 panels docked: top, left, right and middle. But when I dock the top and try to dock another panel on the left, that left panel overlays the top panel..Am I doing something wrong there? is there another way of docking several panels?
You may need to be careful to not drop the panels into any of the other panels before selecting their docking property, or they will assume that the panel they were dropped into is their parent.
I created the setup you see below by simply using 4 panels, each one dropped individually and then assigned the correct docking attribute. I made sure when I dropped them to drop them in space that was currently not used by any existing panels.
I'd assume this is what you are after, correct?

Resizing a panel c# win forms

If you imagine a win form with a line drawn vertically down the middle. On the left i have a graph, and when you click the graph certain forms open on the right in an mdi type panel.
I am trying to figure out how to logically get this to look like a proper application should but am failing!
The whole form loads in a maximised view. I first set the panel width to 0 then when i add a form i check if the panels width is less than the forms, if it is then change the panels width to that of the forms.
This doesn't look great tho tbh, resizing makes strange things happen and i see a lot of grey. Does anyone have any ideas?
Use a SplitContainer on your main form. Ensure it's Dock property is set to Fill
Put your graph stuff on the left panel, and your other stuff on the right side.

Transparent Panel on top of another normal panel

I want to show a transparent panel on top of another panel, both the panels have child controls like labels, text boxes etc. Transparency works fine if the transparent panel is child control of the other panel but if not then the label and text box of the normal panel appears on top of the transparent panel. Transparency for rest of the area works fine.
Any ideas ???
I have tried bring the transparent panel to the front but did not help. Perhaps I need to specify the order in which the controls should be drawn ?? If yes how do I do that ?
Interestingly if I move the application below the task bar and bring it up. It achives the right result. ( Reprinting resolves the issue !! but why??). However when I minimize it and restore it does not fix it!
Thanks,
Transparency in Windows.Forms is implemented by relational hierarchy rather than visual hierarchy. When a transparent control is painted, .NET basically calls up the Parent tree asking each parent control to paint itself, then paints the actual control content itself.
Two siblings in the same control will paint over each other.
So to answer the question, the topmost panel/control needs to be a child of the control you want to paint on top of.
If you want a transparent control that won't obscure its siblings, according to Bob Powell you can do it by overriding the CreateParams method to add true transparency. Read the link for a full description.
If all your panels/labels/controls are part of a single UserControl then you are probably right that you just need to set the Z-order (the front-to-back order). You can do this using the Document Outline inside of Visual Studio's Designer under View > Other Windows > Document Outline.
If you're doing it programatically then you can play around with calling Control.BringToFront() or Control.SendToBack() to change their z-order. One possible way to do this is like (assuming ctl1 is intended to be at the back and ctl4 is intended to be front-mode.
SuspendLayout()
ctl1.BringToFront()
ctl2.BringToFront() ' Bring ctl2 in front of ctl1
ctl3.BringToFront() ' 3 in front of 2 (and in turn 1)
ctl4.BringToFront() ' 4 in front of the rest
ResumeLayout()
The Suspend/Resume Layout calls prevent the UI from updating while you rearrange things.

Categories