public bool Add(BaseForm form)
        {
            if (_forms_list.Contains(form))
            {
                return(false);
            }
            EventHandler <CancelFormEventArgs> adding;
            EventHandler <FormEventArgs>       added;

            lock (_lock_obj) {
                adding = _form_adding;
                added  = _form_added;
            }
            if (adding != null)
            {
                CancelFormEventArgs args = new CancelFormEventArgs(form);
                bool cancel = false;
                foreach (EventHandler <CancelFormEventArgs> handler in adding.GetInvocationList())
                {
                    args.Cancel = false;
                    handler(this, args);
                    cancel |= args.Cancel;
                }
                if (cancel)
                {
                    return(false);
                }
            }
            _forms_list.Add(form);
            if (added != null)
            {
                added(this, new FormEventArgs(form));
            }
            return(true);
        }
        public bool Remove(BaseForm form)
        {
            if (!_forms_list.Contains(form))
            {
                return(false);
            }
            EventHandler <CancelFormEventArgs> removing;
            EventHandler <FormEventArgs>       removed;

            lock (_lock_obj) {
                removing = _form_removing;
                removed  = _form_removed;
            }
            if (removing != null)
            {
                CancelFormEventArgs args = new CancelFormEventArgs(form);
                bool cancel = false;
                foreach (EventHandler <CancelFormEventArgs> handler in removing.GetInvocationList())
                {
                    args.Cancel = false;
                    handler(this, args);
                    cancel |= args.Cancel;
                }
                if (cancel)
                {
                    return(false);
                }
            }
            _forms_list.Remove(form);
            if (removed != null)
            {
                removed(this, new FormEventArgs(form));
            }
            bool exit = true;

            foreach (BaseForm item in _forms_list)
            {
                exit &= !item.Visible;
            }
            if (exit)
            {
                Application.ExitThread();
                //Application.Exit();
            }
            return(true);
        }