BonnieB
Here's the way I do it:
First the FormsHandler class. Notice the static methods.
using System;
using System.Collections;
using System.Windows.Forms;
namespace MyNameSpace.MyClasses
{
public class FormsHandler
{
#region Declarations
private static ArrayList list = new ArrayList();
#endregion
#region Methods
public static int Add(object o)
{
return list.Add(o);
}
public static void Remove(object o)
{
list.Remove(o);
}
public static bool Close()
{
int nCount = list.Count;
while (list.Count > 0)
{
((Form)list[0]).Close();
if (list.Count == nCount)
return false;
else
nCount = list.Count;
}
return true;
}
#endregion
#region Properties
public static ArrayList List
{
get {return list;}
}
#endregion
}
}
Whenever you open a form, no matter where you open it from, all you do is add it to the ArrayList, like this:
Form oForm = new MyForm();
FormsHandler.Add(oForm);
oForm.Show();
In a Form's ClosedHandler() method, you'll want this:
protected virtual void ClosedHandler(object sender, EventArgs e)
{
FormsHandler.Remove(this)
}
When you close your Main Form, you want all other's to Close (but to execute their own Closing methods) ... do it like this:
// This is a menu item that exits the application
private void menuItem4_Click(object sender, System.EventArgs e)
{
System.ComponentModel.CancelEventArgs ee = new CancelEventArgs();
this.ClosingHandler(sender, ee);
}
// This is the ClosingHandler that will execute normally if you close the app
// by clicking on the "X"
private void ClosingHandler(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!FormsHandler.Close())
e.Cancel = true;
else
Application.Exit();
}