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: (you would need something a bit different, since you need to check for the previous existence of the form ... as I said, this is taken from code I've previously posted).
Form oForm = new MyForm();
FormsHandler.Add(oForm);
oForm.Show();
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(); }The only difference is that you'd add another static method that would check the ArrayList to see if the form was already there and so you'd use slightly different code from what I've posted to open your forms.