Whats the difference between Parentform and Owner - c#

In winforms we have objForm.Owner and objForm.Parent. Whats the difference between these two.
I opened a form B from form A as a dialog and was expecting to access form A's public properties from form B using ParentForm property but finally ended up using Owner property instead as ParentForm was null !!

A parent-child relationship exists between windows when the child is embedded in the parent window and cannot move outside of its bounds. Examples are child controls like TextBox and Panel. And the MDI windowing model, MDI child windows are embedded in the MDI parent and parented to the dark-gray MDI client window.
An owned window applies to top-level windows and primarily controls their Z-order. An owned window is always on top of its owner. It is also minimized and restored along with its owner. Examples are tool windows and dialogs.
Note how a Form is normally a top-level window and does not have a parent. So wouldn't have a use for its Parent and ParentForm properties. It can however be turned into a child window by setting its TopLevel property to false. Sample code is here.

Form.Owner - Is the Form that "owns" this form. For example Find/Replace dialog would be Owned by Notepad's main window. If you
minimize the main Form, the owned form will minimize, if you restore
the main form, the owned form will restore
ContainerControl.ParentForm - Is the Form that this ContainerControl is ultimately placed on
Check this article. Their is explained Parent too.

Related

Unable to display Child form on top of main form's controls

Windows 7 pro 64 bit, VS2015 or VS2019
Hi,
I have a C# Win Form with many various controls.
I defined the main form as MDI parent and built an MDI child form with it's own controls, activated by a menue item in the main.
The child form builds nicely, but it is always displayed under the main form's many different controls.
I have tried many remedies, non of whch solved the problem.
I'v Set the child form as TopMost = true; TopLevel = true; each or all, for no avail.
Have moved from VS2015 to VS2019 community - Same.
I have been wasting hours to solve something that seems to be strightforward.
Can anyone help me out of this?
//In Main Form with menustrip, ComPortSetup is a standard winform class with some controls
private void portSetupToolStripMenuItem_Click(object sender, EventArgs e)
{
ComPortSetup comPortSetup = new ComPortSetup();
comPortSetup.MdiParent = this;
comPortSetup.TopMost = true;
comPortSetup.TopLevel = true; //Can not change programmatically
comPortSetup.Show();
}
That is how MDI works, there is no way around that.
All controls on the MDI Parent form will take away "client" space for the MDI child forms. And thus they will always be shown on top of any MDI Child form.
In other words, the MDI child forms can only use the space that is on the MDI Parent form that is not occupied already by other controls.
What you can do is put a panel on the MDI Parent form, and for example dock it to the left. Then put your "main" controls on that panel. The MDI Child forms will use whatever space is left on your MDI Parent form.
You could put a splitter control next to this panel so you can make it larger or smaller, or make it slidable so the panel comes forward when your mouse is near it, and hides itself again when the mouse is moving away from it.
Another approach you can try, is not making it MDI anymore and set the parent of the "child" forms yourself. But this will most likely cause other problems.
I would try the first approach, the panel on the mainform, docked to the left with a splitter control next to it.
I am not sure, but I believe that when using MDI forms, it is not expected that the parent has its own controls on the main form area, otherwise you will experience this exact problem.
So there are a couple of ways around this.
Firstly you can place a Panel on your parent form, and then your child can be added to the Panel.
This is now "proper" MDI control however, but it might allow you to achieve what you want.
ChildForm child = new ChildForm();
parentPanel.controls.add(child); //ParentPanel needs to already be on main form
Or the other method is to put your Parent Controls either on a MenuStrip (like MS Word) or you can use a Floating Dockable child form (think Visual Studio) which is then always visible.
If you want to do the latter, then I would suggest DockPanelSuite control to help you with this
https://github.com/dockpanelsuite/dockpanelsuite

WPF Desktop application MDI like/Parent-Child

I'm creating an WPF desktop application.
Desc : One main window(Parent) for whole application which includes display, completely docked display.
"X" no. of child windows, whenever whichever child is opened, On minimizing of this child, the child should get minimized on the parent window [Currently, it goes behind the main window]
WHAT I NEED : Whenever child is minimized it should not go behind, it should be minimized on parent window.
Note : I cannot use wpf.mdi.dll, since I have a data display on my main screen(Parent window, Display will be completely docked)
Perhaps you can use AvalonDock(free) or Telerik Docking(not free).
After setting
Owner = this;
ShowIntaskbar=false;
The thing worked for me

How to achieve that just the top modal window is accessible?

Following problem. In my application you can open multiple modal windows. Every window is dependent on the previous opened window (hierarchical). Means that when a child window is opened, the user cannot drag this child window aside and interact with the parent window.
How can I achieve, that the surface behind the top child window freezes? I use RadWindow, by the way.
Try setting the child RadWindow's Owner property to its parent RadWindow.
The key was the bool WindowBaseAutomationPeer.IsTopmost Property of the RadWindow class. Telerik Documentation

parent form is accessible when child form is open

I have created a parent form and a child form in c# when i click a menu item in parent form, it opens the child form but still i access the parent form.i want that the parent form will remain inaccesible until the child form is open.please send me the code.thnks
try with this
form.ShowDialog()
Probably you should use form.ShowDialog() method instead of form.Show()
Definitely you should add a better description, at least framework you are using (WinForms?). C# is not a framework.
Use, form.Hide() process to make the Parent form to be not accessable when ever the child form opens and again give form.show() to activate the parent form.
If you want your parent form visible while showing your child form then you can do following.
form.ShowDialog(this).
Where this is the instance of your parent form.
On the other hand, if you want your parent form hide while showing child form you can do following
this.Hide();
form.ShowDialog(this)

How do a make one form stay on top of another?

I have found the Form.TopMost property but it puts the form on top of everything, including stuff that isn't part of my app. I've got a suspicion that I'm missing something obvious here. (Is Form the proper bases class for a non modal dialog box?)
Use the Form.Owner property of your dialog form and set it to the main Form.
Read more here
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx
The Owned form will never be displayed behind the Owner Form.
It is very simple; You just have to pass the owner when you call the Show() method
YourForm.Show(parentForm);
You can specify parent-child relationships between windows by supplying the parent Form as parameter to the ShowDialog() method called on the child Form. The child window will then stay on top of the parent and also minimize and restore along with the parent.
If i understand you correctly your opening a form from your application, and you want your new form to be on top of the old one.
To do this you can use ShowDialog() and StartPosition
SomeForm MyNewForm = new SomeForm();
MyNewForm.ShowDialog();
this will make that form stay on top of the orignal one, and you can also use
MyNewForm .StartPosition = FormStartPosition.CenterParent;
To control where that new form shows on the screen.

Categories

Resources