using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; namespace DevComponents.DotNetBar { public class MultiFormAppContext : ApplicationContext { private List _OpenedForms = new List(); public MultiFormAppContext(Form initialForm) { // Handle the ApplicationExit event to know when the application is exiting. Application.ApplicationExit += new EventHandler(this.OnApplicationExit); WeakReference reference=new WeakReference(initialForm); _OpenedForms.Add(reference); initialForm.FormClosed += FormClosed; initialForm.Show(); } public void RegisterOpenForm(Form form) { bool opened = false; foreach (WeakReference item in _OpenedForms) { object target = item.Target; if (target != null && target.Equals(form)) { opened = true; break; } } if (!opened) { WeakReference reference = new WeakReference(form); _OpenedForms.Add(reference); form.FormClosed += FormClosed; } } /// /// Returns read-only list of opened forms. /// public List
OpenedForms { get { List list=new List(); foreach (WeakReference item in _OpenedForms) { object target = item.Target; if (target != null && target is Form) { list.Add((Form)target); } } return list; } } private void FormClosed(object sender, FormClosedEventArgs e) { Form form = (Form) sender; form.FormClosed -= FormClosed; foreach (WeakReference item in _OpenedForms) { object target = item.Target; if (target != null && target.Equals(form)) { _OpenedForms.Remove(item); break; } } if(_OpenedForms.Count==0) ExitThread(); } protected virtual void OnApplicationExit(object sender, EventArgs e) { } private static MultiFormAppContext _CurrentMultiFormAppContext=null; /// /// Gets or sets current MultiFormAppContext context. If you are using MultiFormAppContext to start your app then you should also /// set that instance of MultiFormAppContext to this property so internally TabFormControl can register any new deattached forms /// and prevent application from closing if startup form is closed first. /// public static MultiFormAppContext Current { get { return _CurrentMultiFormAppContext; } set { _CurrentMultiFormAppContext = value; } } } }