Greycrow
Greycrow

Reputation: 1633

Set the Parent of a Form

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

Upvotes: 26

Views: 75518

Answers (3)

Paul Sasik
Paul Sasik

Reputation: 81557

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 SavingForm and not allow the user to monkey with anything.

Upvotes: 22

Matt
Matt

Reputation: 27036

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.

Upvotes: 6

Cory Charlton
Cory Charlton

Reputation: 8938

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);

Upvotes: 18

Related Questions