From a child form I wanted to close the parent form after a button was clicked, the following is the code I used:
// In the child form, create an event that indicates the special occurrence.
public event EventHandler Special;
protected virtual void OnSpecial(EventArgs e) {
EventHandler Handler = Special;
if (Handler != null)
Handler(this, e);
}
// Perhaps a button Click is the event you want to indicate the Special event from.
protected void SomeButton_Click(object sender, EventArgs e) {
...
// After doing some stuff, fire the special event.
OnSpecial(EventArgs.Empty);
}
-----------------------------------
// * Back in the parent form.
...
// Create the child form and subscribe to its Special event.
ChildForm childForm = new ChildForm();
childForm.Special += new EventHandler(ParentForm_Special);
// Set the owner for the child form and show it.
childForm.Owner = this;
childForm.Show();
...
// The handler for the child form's Special event.
void ParentForm_Special(object sender, EventArgs e) {
// Close both forms.
ChildForm childForm = (ChildForm)sender;
childForm.Close();
this.Close();
}
Voila!