Ejemplo n.º 1
0
 /// <summary>Инициализация формы</summary>
 /// <param name="ctx">Контекст приложения</param>
 /// <param name="formModes">Режимы запуска</param>
 /// <param name="extParams">Параметры для запроса</param>
 /// <param name="key">Ключ записи (не используется)</param>
 public override void Init(Context ctx, FormModes formModes = FormModes.Default, Dictionary <string, object> extParams = null, object key = null)
 {
     base.Init(ctx, formModes, extParams, key);
     error             = new ErrorProvider();
     error.BlinkStyle  = ErrorBlinkStyle.NeverBlink;
     IsNewRec          = formModes.HasFlag(FormModes.NewRecEdit);
     IsViewOnly        = formModes.HasFlag(FormModes.ViewOnlyEdit);
     KeepOpenAfterSave = KeepOpenAfterSave && !IsNewRec && !IsViewOnly;
 }
Ejemplo n.º 2
0
        /// <summary>Вызов формы</summary>
        /// <param name="form">Форма</param>
        /// <param name="parent">Родительская форма</param>
        /// <param name="formModes">Режимы запуска</param>
        /// <param name="extParams">Параметры для запросов</param>
        /// <param name="key">Ключ записи (например чтобы встать на нужной строке в главном гриде формы списка)</param>
        /// <returns>True только в случае положительного результата (OK) для модальной формы</returns>
        public bool ExecForm(Form form, Form parent = null, FormModes formModes = FormModes.Default, Dictionary <string, object> extParams = null, object key = null)
        {
            bool res = false;

            if (form == null || form.IsDisposed)
            {
                return(res);
            }
            if (form.Visible)
            {
                return(res);
            }

            string typeName = (parent != null ? parent.GetType().Name + "." : "") + form.GetType().Name;

            // проверка уже запущенных
            if (formModes.HasFlag(FormModes.Single))
            {
                if (LivingForms.ContainsKey(typeName) && LivingForms[typeName] != null && !LivingForms[typeName].IsDisposed)
                {
                    if (LivingForms[typeName].WindowState == FormWindowState.Minimized)
                    {
                        LivingForms[typeName].WindowState = FormWindowState.Normal;
                    }
                    LivingForms[typeName].Activate();
                    form.Dispose();
                    return(res);
                }
                LivingForms.Add(typeName, form);
            }

            Cursor.Current = Cursors.WaitCursor;
            try {
                SaveLog("EXEC_FORM", $"Start form {form.Name} ({form.Text})");
                form.Load       += AnyForm_Load;
                form.FormClosed += AnyForm_Closed;
                form.KeyDown    += AnyForm_KeyDown;
                // особенности для бибилиотечных форм
                if (form is IDataForm)
                {
                    ((IDataForm)form).Init(this, formModes, extParams, key);
                }
                // запуск
                if (formModes.HasFlag(FormModes.Modal))
                {
                    form.StartPosition = FormStartPosition.CenterParent;
                    res = (form.ShowDialog(parent) == DialogResult.OK);
                    form?.Dispose();
                }
                else
                {
                    form.StartPosition = FormStartPosition.Manual;
                    if (MainForm != null)   // позиционирование
                    {
                        int h = form.RectangleToScreen(form.ClientRectangle).Top - form.Top;
                        int top = MainForm.Bottom, left = 0;
                        for (int i = 0; i < 5; i++)
                        {
                            if (!LivingForms.Any(x => x.Value.Top >= top && x.Value.Top < top + 25))
                            {
                                break;
                            }
                            top += h; left += h;
                        }
                        form.Top = top; form.Left = left;
                    }
                    if (parent == null)
                    {
                        form.Show();
                    }
                    else
                    {
                        form.Show(parent);
                    }
                }
            }
            catch (Exception e) {
                form?.Dispose();
                if (LivingForms.ContainsKey(typeName))
                {
                    LivingForms.Remove(typeName);
                }
                Loger.SendMess(e);
            }
            finally {
                Cursor.Current = Cursors.Default;
            }
            return(res);
        }