Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set the Parent of a Form

Tags:

c#

winforms

I have a Windows form from which I would like to open a status form that says "Saving..." and then disapears when the saving is complete. I would like to center this small status form in the middle of the calling form. I've tried setting the "StartPosition" propery to "CenterParent", but it doest work. I create the status form from the other form like so:

SavingForm saving = new SavingForm();
savingForm.Show();
Thread.Sleep(500); //Someone said this is bad practice ... why?
savingForm.Close();

Wouldn't the calling form be the "Parent"? When I set a watch for saving it says it has no parent.

I tried:

SavingForm saving = new SavingForm();
saving.Parent = this;
savingForm.Show();
Thread.Sleep(500);
savingForm.Close();

and it throws an exception "Top-level control cannot be added to a control."

How do I center this status window in the calling window?

Thanks in advance

like image 782
Greycrow Avatar asked Feb 07 '10 18:02

Greycrow


People also ask

Which property of a child form is used to set its parent form?

MidParent: The MidParent property is used to set a parent form to a child form. ActiveMdiChild: The ActiveMdiChild property is used to get the reference of the current child form.

What is parent in C#?

Derived Class (child) - the class that inherits from another class. Base Class (parent) - the class being inherited from.

What is form inheritance?

Form inheritance enables you to create a base form and then inherit from it and make modifications while preserving whatever original settings you need. You can create subclassed forms in code or by using the Visual Inheritance picker.

How do you pass data from child to parent in Windows Forms?

To send data from Parent to Child form you need to create a parameterized constructor. To send data from Child to Parent form you need to create a public method in Child class and use the method in Parent class to get the return value.


3 Answers

i would do something like this:

SavingForm saving = new SavingForm();
savingForm.ShowDialog(this);

In SavingForm i would start a timer in the load handler that runs for 500 milliseconds and then closes the form when done. Cleaner that way. ShowDialog will also lock your UI to only display the saving form and not allow the user to monkey with anything.

like image 52
Paul Sasik Avatar answered Sep 17 '22 17:09

Paul Sasik


Use this:

saving.Show(this);

To set the Owner when you show the form.

Edit: The ShowDialog() method also has an overload that let's you specify the owner if that is the route you decide to go:

saving.ShowDialog(this);
like image 24
Cory Charlton Avatar answered Sep 17 '22 17:09

Cory Charlton


If you pass the parent (this) to the Owner, like

SavingForm saving = new SavingForm() { Owner = this };

then you can access Owner's properties and methods in the child form (in this case SavingForm), provided that the Owner's properties Modifier is set to Internal or Public for each property you need to access (you can either edit the modifier directly in the source code, or via form's designer properties - there is a Modifier property for each control).

You can find a nice explanation of the differences between Owner, Parent and ParentForm here.

Note: Passing it like saving.Show(this); or saving.ShowDialog(this); did not help in my case.

like image 41
Matt Avatar answered Sep 18 '22 17:09

Matt